使用docker运行private_pub



我有一个应用程序,它使用private_pub gem(使用faye)向用户发送通知。问题是,我试图使用docker和docker-compose进行部署(因为需要很多东西,比如solr搜索和redis)。只要一切都在localhost下运行,一切都很好。但现在我的Web服务器和所有其他服务一样运行在docker容器中。我试过为faye启动一个容器,但发布或订阅都不起作用。

这是我的docker撰写文件:

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

有了这个配置,我可以从"外部"(意思是哑终端)联系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配置文件只允许一个地址。。。因此,订阅频道对客户端有效,但我不能从控制器发布,或者我可以从控制器发布但用户不能订阅。我该如何解决这个问题?

如有任何帮助,我们将不胜感激!:-)

因此,如果有人试图在码头化的rails应用程序中运行private_pub,下面是我如何运行它的:

  • 打开web容器的9292端口
  • 从web容器运行rackup命令rackup private_pub.ru -s thin -E production -o 0.0.0.0明确告诉thin使用主机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"

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

最新更新