使用docker运行private_pub

时间:2017-01-18 16:13:53

标签: ruby-on-rails docker docker-compose faye private-pub

我有一个使用private_pub gem(使用faye)向用户发送通知的应用。 问题是我正在尝试使用docker和docker-compose进行部署(因为需要很多东西,比如solr search和redis)。 只要一切都在localhost下运行,一切都很好。但现在我的网络服务器正在一个docker容器以及所有其他服务中运行。我已经尝试为faye启动容器,但随后发布或订阅不起作用。

这是我的docker-compose文件:

   // in case I get redirect from the SelCat actionresult:
   if (id.HasValue and string.IsNullOrEmpty(seoname)) { 
      // look in the database for title by the given id
      string seofriendlyTitle = ...;
      RouteData.Values.AddOrSet("seoname", seofriendlyTitle); // <-- does not alter url
   }

我的private_pub.yml

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:

通过这种配置,从“外部”(意思是哑终端),我可以联系王菲: 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 成功 它也可以从docker web容器中运行,但具有不同的地址:

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

然而,private_pub.yml配置文件只允许一个地址...所以订阅频道既适用于客户端,但我无法从控制器发布,或者我可以从控制器发布但用户无法订阅。我该如何解决这个问题?

任何帮助将不胜感激! : - )

1 个答案:

答案 0 :(得分: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上可用的rails容器相同)

在private_pub.yml中,参数如下:

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

不确定这是最好的方法,但这是我能让它发挥作用的唯一方法;经过3天的搜索和过多的咖啡,我不会要求更多。