0

ユーザーに通知を送信するために private_pub gem (faye を使用) を使用するアプリがあります。問題は、docker と docker-compose を使用してデプロイしようとしていることです (solr 検索や redis など、必要なものがかなりあるため)。すべてが localhost で実行されている限り、すべて問題ありませんでした。しかし今、私のウェブサーバーは、他のすべてのサービスと同様に、docker コンテナーで実行されています。faye のコンテナーを開始しようとしましたが、公開またはサブスクライブが機能しません。

これが私のdocker-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

この構成では、「外部」(ダム端末を意味する) から faye に連絡できます: curl -X POST http://localhost:9292/faye -H 'Content-Type: application/json' -d '{"channel": "/foo", "data": "Hello", "ext": {"pushToken": "secret"}}'成功しています。Docker Web コンテナーからも機能しますが、アドレスが異なります:

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

ただし、private_pub.yml 構成ファイルでは 1 つのアドレスしか許可されていません...したがって、チャネルへのサブスクライブはクライアントに対して機能しますが、コントローラーからは発行できません。または、コントローラーからは発行できますが、ユーザーはサブスクライブできません。どうすればこれを解決できますか?

どんな助けでも大歓迎です!:-)

4

1 に答える 1

0

したがって、誰かが Docker 化された Rails アプリで private_pub を実行しようとしている場合に備えて、これを実行する方法を次に示します。

  • Web コンテナーのポート 9292 を開きます
  • Web コンテナーから、rackup コマンドを実行します。thinrackup private_pub.ru -s thin -E production -o 0.0.0.0 にホスト 0.0.0.0 を使用するように明示的に指示することが重要です。これにより、外部からポート 9292 で使用できるようになります (ポート 3000 で使用できる Rails コンテナーと同じです)。

private_pub.yml のパラメーターは次のとおりです。

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

それが最善の方法かどうかはわかりませんが、それが私がそれを機能させる唯一の方法です。そして、3 日間検索してコーヒーを飲みすぎた後は、これ以上求めるつもりはありません。

于 2017-01-20T16:23:53.903 に答える