2017-01-18 15 views
0

У меня есть приложение, в котором используется private_pub gem (который использует faye) для отправки уведомлений пользователям. Проблема в том, что я пытаюсь развернуть с помощью docker и docker-compose (так как требуется немало вещей, таких как поиск solr и redis). Пока все работает под локальным хостом, все в порядке. Но теперь мой веб-сервер работает в контейнере докеров, а также во всех других сервисах. Я попытался запустить контейнер для faye, но публикация или подписка не работают.Запуск private_pub с докере

Вот мой докер-Compose файл:

version: "2" 
services: 
    web: 
    build: . 
    command: rails server -e development -p 3000 -b '0.0.0.0' 
    volumes: 
     - .:/app 
    ports: 
     - "3000:3000" 
    links: 
    - solr:solr 
    - mariadb 
    - redis 
    depends_on: 
     - solr 
    env_file: 
     - .env 
    solr: 
    image: solr 
    ports: 
    - "8983:8983" 
    volumes: 
     - data:/opt/solr/server/solr/mycores 
    entrypoint: 
     - docker-entrypoint.sh 
     - solr-precreate 
     - qwerteach 
    mariadb: 
    image: mariadb 
    volumes: 
     - mariadb:/var/lib/mysql 
    env_file: 
     - .env 
    ports: 
     - "13306:3306" 
    redis: 
    image: redis:latest 
    ports: 
     - "6379" 
    faye: 
    image: nickjj/faye 
    links: 
     - redis 
    ports: 
     - "9292:9292" 
    environment: 
     FAYE_PUSH_TOKEN: "secret" 
     FAYE_PORT: 9292 
     FAYE_MOUNT: "/faye" 
     FAYE_LOGGING: 1 

volumes: 
    data: 
    mariadb: 

И мой private_pub.yml

development: 
    server: "http://faye:9292/faye" 
    secret_token: "secret" 
test: 
    server: "http://localhost:9292/faye" 
    secret_token: "secret" 
production: 
    server: "http://example.com/faye" 
    secret_token: "9eba1078bbb9289f949f51abc7ed5f842fed3af11374056bf09799e4ef2733f2" 
    signature_expiration: 3600 # one hour 

В этой конфигурации "снаружи" (то есть немой терминал) я могу связаться с Фей: curl -X POST http://localhost:9292/faye -H 'Content-Type: application/json' -d '{"channel": "/foo", "data": "Hello", "ext": {"pushToken": "secret"}}' Успешно Он также работает с контейнером для докеров, но с другим адресом:

curl -X POST http://faye:9292/faye  -H 'Content-Type: application/json'  -d '{"channel": "/foo", "data": "Hello", "ext": {"pushToken": "secret"}}' 

Однако файл конфигурации private_pub.yml допускает только один адрес ... Таким образом, либо подписка на каналы работает для клиентов, но я не могу публиковать данные из контроллеров, или я могу публиковать их с контроллеров, но пользователи не могут подписаться. Как я могу это решить?

Любая помощь будет оценена! :-)

ответ

0

Таким образом, в случае, если кто-то пытается запустить private_pub в dockerized рельсы приложение, вот как я получил это работает:

  • открытый порт 9292 веб-контейнера
  • с веб-контейнера запустите команду rackup rackup private_pub.ru -s thin -E production -o 0.0.0.0 Явным, говоря тонким, чтобы использовать хост 0.0.0.0 ключ, то, как она будет доступна с внешней стороны на порт 9292 (такого же, как контейнер рельсов, что доступно на порт 3000)

T он в private_pub.yml, параметры являются следующие:

production: 
    server: "http://production.server.ip:9292/faye" 
    secret_token: "this_is_a_very_secret_token" 

Не уверен, что это лучший способ сделать это, но это единственный способ, которым я мог бы сделать его работу; И после 3 дней поиска и слишком большого количества кофе я больше не буду просить.