Ваш docker-compose.yml
правильный, и URL, который вы используете, также правильный. Я думаю, что проблема в том, что mongo
требуется больше времени для запуска, чем к YourWebApi, и вы просто пытаетесь подключиться к базе данных, пока она еще не готова.
Поле depends_on
контролирует только стартовый порядок, но не дает гарантии того, что услуги готовы.
Итак, попробуйте добавить некоторое время ожидания в ваше приложение. Если это работает, просто введите метод wait-for
- ожидание открытия удаленного сокета. Это стандартный способ решения вашей проблемы.
'function(%s)' % ', '.join(args)
производит
'function(a, b, c, d)'
result = 'function (%s)' % ', '.join(map(str,args))
Я рекомендую карту (ул., args) вместо просто args, потому что некоторые Ваши аргументы не могли потенциально быть строками и вызовут TypeError, например, с международным аргументом в Вашем списке:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
При вхождении в объекты dict, Вы, вероятно, захотите к отдельному от запятой значения dict (по-видимому, потому что значения - то, что Вы хотите передать в эту функцию). Если Вы сделаете метод соединения на самом объекте dict, то Вы разделите ключи, как так:
>>> d = {'d':5, 'f':6.0, 'r':"BOB"}
>>> ','.join(d)
'r,d,f'
То, что Вы хотите, следующее:
>>> d = {'d':5, 'f':6.0, 'r':"BOB"}
>>> result = 'function (%s)' % ', '.join(map(str, d.values()))
>>> result
'function (BOB, 5, 6.0)'
Отметьте новую проблему, с которой Вы встречаетесь, как бы то ни было. При передаче аргумента строки через функцию соединения это теряет свое заключение в кавычки. Таким образом, если бы Вы запланировали передать строки через, Вы потеряли кавычки, которые обычно окружали бы строку при передаче в функцию (строки заключаются в кавычки на многих языках общего назначения). Если Вы только передаете числа, однако, это не проблема для Вас.
Существует, вероятно, более хороший способ решить проблему, которую я просто описал, но здесь являюсь одним методом, который мог работать на Вас.
>>> l = list()
>>> for val in d.values():
... try:
... v = float(val) #half-decent way of checking if something is an int, float, boolean
... l.append(val) #if it was, then append the original type to the list
... except:
... #wasn't a number, assume it's a string and surround with quotes
... l.append("\"" + val + "\"")
...
>>> result = 'function (%s)' % ', '.join(map(str, l))
>>> result
'function ("BOB", 5, 6.0)'
Теперь строка имеет кавычки, окружающие себя. При передаче более составных типов, чем числовые примитивы и строки затем, Вам, вероятно, нужен новый вопрос :)
Одно последнее примечание: Я использовал d.values (), чтобы показать, как извлечь значения из словаря, но на самом деле который возвратит значения из словаря в в значительной степени произвольном порядке. Так как Ваша функция, скорее всего, требует аргументов в особом порядке, необходимо вручную создать список значений вместо того, чтобы назвать d.values ().
Почему бы не использовать стандарт, который оба языка могут проанализировать, как JSON, XML или YAML? simplejson удобен, и включенный как json в python 2.6.