【发布时间】:2019-01-08 21:10:14
【问题描述】:
我们应该如何在 Rails 中配置 action cable 以在 Google App Engine 中工作?
我有一个 Rails 应用程序,它使用动作电缆作为它的信使。 在我的本地主机上,动作电缆在开发和生产环境中运行良好,但 它在 Google App Engine 上不起作用。
我创建了一个计算机引擎实例并在其上安装了 Redis。
防火墙允许所有流量流向 Redis 虚拟机。
Redis 已绑定 0.0.0.0
当我在 Google App Engine 上部署应用时出现错误:
Firefox 无法与位于 wss://mydomain.com/cable 的服务器建立连接。
这是我目前的配置:
config/environments/production.rb
config.action_cable.url = 'wss://[MYDOMAIN].com/cable'
config.action_cable.disable_request_forgery_protection = true
config.force_ssl = true
...
config/cable.yml
production:
adapter: redis
url: redis://[IP_OF_REDIS_SERVER]:6379/
app.yaml
entrypoint: bundle exec rackup --port $PORT
env: flex
runtime: ruby
env_variables:
REDIS_PROVIDER: REDIS_URL
REDIS_URL: redis://[IP_OF_REDIS_SERVER]:6379/
SECRET_KEY_BASE: [My_Secret_Key]
我在 App Engine 的 Google 文档中找不到任何有关可操作设置的信息。我希望这个问题可以帮助我和每个有同样问题的人。
【问题讨论】:
-
你解决了吗?我在这里遇到同样的麻烦。每当我在生产模式下本地运行时,我都可以连接到 redis 实例。但是当我检查生产日志时,我可以看到错误“(Redis::TimeoutError)(Redis::CannotConnectError)”我认为这可能是与防火墙有关的错误,我在redis实例上有一个规则允许使用端口 6379,但我的应用实例上没有此规则。
-
我最终转向了计算引擎,我在那里创建了 redis 服务器和生产服务器。如果您在计算机引擎上进行操作,事情会简单得多。在应用引擎中,您无权访问任何内容,也没有文档。我只花了 1 小时就创建了 redis 服务器,并用了 1 小时在计算机引擎上创建了生产服务器。
标签: ruby-on-rails google-app-engine redis actioncable