2017-01-18 46 views
0

我有一個應用程序使用private_pub gem(它使用faye)向用戶發送通知。 問題是,我試圖部署使用碼頭和碼頭構成(因爲有很多東西需要,如solr搜索和redis)。 只要一切都在localhost下運行,一切都很好。但是現在我的網絡服務器在碼頭集裝箱以及所有其他服務中運行。我嘗試爲faye啓動一個容器,但是然後發佈或訂閱不起作用。與docker運行private_pub

這裏是我的搬運工,撰寫文件:

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"}}'成功 它也適用於碼頭Web容器,但使用不同的地址:

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

但是,private_pub.yml配置文件只允許一個地址...所以無論是訂閱頻道的客戶端,但我不能從控制器發佈,或者我可以從控制器發佈,但用戶無法訂閱。我該如何解決這個問題?

任何幫助,將不勝感激! :-)

回答

0

所以,如果有人試圖在dockerized Rails應用程序來運行private_pub,這裏就是我得到了它運行:Web容器的

  • 開放端口9292
  • 從Web容器,運行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天的搜索和太多的咖啡,我不會再要求更多。