【发布时间】:2015-04-23 18:39:33
【问题描述】:
我按照此处介绍的模型构建了一个 Rails 应用程序: http://mikeatlas.github.io/realtime-rails/
我正在使用带有 realtime-rails gem 和 redis 的 Rails。我的应用程序在我的开发环境中运行,我想将它移动到 Heroku。我已经在 Redis-to-go 上设置了一个 Redis 数据库,现在我想对 realtime-gem 和关联的 socket-io 服务器设置进行任何必要的更改。至少,我需要修改 application_controller 的生产部分:
def realtime_server_url
if Rails.env.development?
return 'HTTPLOCALHOST:5001'
end
if Rails.env.production?
return 'PRODUCION-LOCATION'
end
end
我已经将 socket-io 服务器 (realtime-server) 部署到了一个单独的 heroku 实例,该服务器是按照上面链接中的 realtime-server 链接的说明安装的。然后,我使用端口 5001 以及 http 和 https 为实时服务器测功机创建了 PRODUCION-LOCATION url。不开心。
按照说明,在我的项目文件夹的顶层创建了 realtime-server 文件夹,与 app 文件夹平行。这是否意味着我应该将它包含在主存储库中,并以某种方式让它从与应用程序相同的测功机运行?如果是这样,我该如何开始呢?说明说在本地启动它:
cd realtime-server
foreman start
不清楚我是否可以通过 heroku cli 做到这一点,是否能够在同一个实例中运行以及它是如何启动的。
=============
更新
在 heroku 上找到了让我意识到的文档,我需要为运行实时服务器的 heroku dyno 设置 REDISCLOUD_URL:
heroku config:add REDISCLOUD_URL='redis_cloud_url'
并且在生产中它没有使用 5001 端口:
if (process.env.NODE_ENV != 'production') {
port = 5001; // run on a different port when in non-production mode.
}
此外,还发现实时服务器正在执行 HTTPS 的表单控制台日志。
现在,阻塞问题似乎是来自实时服务器的 /socket.io/socket.io.js 请求,它返回:
503 (Service Unavailable)
到目前为止,将实时服务器与 Rails 应用程序存储库分开似乎是正确的举措。
查看实时服务器的代码以确定其路由方式...
=================
更新
我查看了有关您建议的日志,谢谢。看到实时服务器因为不喜欢该端口而崩溃,所以我尝试使用以下方法设置 PORT 变量 443、3000、5001 无济于事:
heroku config:add PORT='443'
基于实时服务器的 enviornment.js 文件中的此代码:
var port = process.env.PORT || 5001;
if (process.env.NODE_ENV != 'production') {
port = 5001; // run on a different port when in non-production mode.
}
这里是日志的摘录:
2015-02-22T19:26:45.512317+00:00 heroku[api]: Set PORT config vars by tmt@breakthroughtek.com
2015-02-22T19:26:45.512317+00:00 heroku[api]: Release v5 created by tmt@breakthroughtek.com
2015-02-22T19:26:45.754327+00:00 heroku[web.1]: State changed from crashed to starting
2015-02-22T19:26:48.318928+00:00 heroku[web.1]: Starting process with command `node forever.js`
2015-02-22T19:26:49.540190+00:00 app[web.1]: Detected 512 MB available memory, 512 MB limit per process (WEB_MEMORY)
2015-02-22T19:26:49.540213+00:00 app[web.1]: Recommending WEB_CONCURRENCY=1
2015-02-22T19:26:49.957808+00:00 app[web.1]: STARTING ON PORT: 5001
2015-02-22T19:27:44.163425+00:00 heroku[api]: Scale to web=1 by tmt@breakthroughtek.com
2015-02-22T19:27:48.811493+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2015-02-22T19:27:48.811551+00:00 heroku[web.1]: Stopping process with SIGKILL
2015-02-22T19:27:49.561043+00:00 heroku[web.1]: State changed from starting to crashed
2015-02-22T19:27:49.561720+00:00 heroku[web.1]: State changed from crashed to starting
2015-02-22T19:27:49.534451+00:00 heroku[web.1]: Process exited with status 137
2015-02-22T19:27:51.936860+00:00 heroku[web.1]: Starting process with command `node forever.js`
2015-02-22T19:27:53.289025+00:00 app[web.1]: Detected 512 MB available memory, 512 MB limit per process (WEB_MEMORY)
2015-02-22T19:27:53.289046+00:00 app[web.1]: Recommending WEB_CONCURRENCY=1
2015-02-22T19:27:53.703573+00:00 app[web.1]: STARTING ON PORT: 5001
2015-02-22T19:28:51.991836+00:00 heroku[web.1]: Stopping process with SIGKILL
2015-02-22T19:28:51.991836+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2015-02-22T19:28:52.758191+00:00 heroku[web.1]: Process exited with status 137
2015-02-22T19:28:52.764783+00:00 heroku[web.1]: State changed from starting to crashed
2015-02-22T19:31:22.240362+00:00 heroku[api]: Set PORT config vars by tmt@breakthroughtek.com
2015-02-22T19:31:22.240362+00:00 heroku[api]: Release v6 created by tmt@breakthroughtek.com
2015-02-22T19:31:22.378770+00:00 heroku[web.1]: State changed from crashed to starting
2015-02-22T19:31:24.766187+00:00 heroku[web.1]: Starting process with command `node forever.js`
2015-02-22T19:31:26.316332+00:00 app[web.1]: Detected 512 MB available memory, 512 MB limit per process (WEB_MEMORY)
2015-02-22T19:31:26.316353+00:00 app[web.1]: Recommending WEB_CONCURRENCY=1
2015-02-22T19:31:26.717561+00:00 app[web.1]: STARTING ON PORT: 5001
============
更新
查看日志并看到系统仍在选择端口 5001,我通过以下方式检查了 heroku 环境:
heroku config
并看到 NODE_ENV 变量未设置。做了一个:
heroku config:add NODE_ENV='production'
现在 js 文件正在加载。耶!!! .. 谢谢,d.danailov :)
必须解决 Heroku 上的 rails 的一些问题,在访问管理区域时出现缺少模板错误:
2015-02-22T20:04:36.492199+00:00 app[web.1]: Processing by LocationsController#index as HTML
2015-02-22T20:04:36.497052+00:00 app[web.1]: * "/app/app/views"
2015-02-22T20:04:36.497054+00:00 app[web.1]: * "/app/vendor/bundle/ruby/2.0.0/gems/devise-3.4.1/app/views"
2015-02-22T20:04:36.497059+00:00 app[web.1]: app/controllers/locations_controller.rb:8:in `index'
2015-02-22T20:04:36.497050+00:00 app[web.1]: ActionView::MissingTemplate (Missing template locations/index, application/index with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:
2015-02-22T20:04:36.497062+00:00 app[web.1]:
2015-02-22T20:04:36.497057+00:00 app[web.1]: ):
2015-02-22T20:04:36.497060+00:00 app[web.1]:
2015-02-22T20:04:36.497056+00:00 app[web.1]: * "/app/vendor/bundle/ruby/2.0.0/gems/realtime-0.0.12/app/views"
当然,该页面在开发中运行良好。因此,我将假设它与链轮/资产管道有关。
但我认为这部分可以解决。一旦我确认我可以发送实时消息,我将关闭。
=============
更新
已解决:请注意不要在应用程序的其他地方使用 redis。 注意:我在初始化程序中有一个鬼鬼祟祟的小 Redis.new,它正在清除我的 Redis 配置设置。
【问题讨论】:
-
你能提供更多细节吗?请输入
heroku logs -
我希望我的更新有所帮助,但这里是 node.js 实时服务器的代码 link
标签: ruby-on-rails node.js ruby-on-rails-4 heroku socket.io