【问题标题】:I can't run my Rails application with daemons gem我无法使用守护进程 gem 运行我的 Rails 应用程序
【发布时间】:2012-10-29 08:46:35
【问题描述】:

我想在我的 Rails 项目中使用 Daemons gem,这样我就可以使用 Monit 轻松监控它,这个 gem 将允许我创建 PID 并使用 start 和 stop 等命令。

无论如何,我似乎无法将它与 rails 一起使用,我创建了一个文件并将其命名为 admin:

require 'rubygems'
require 'daemons'

ROOT_PATH = File.expand_path("#{File.dirname __FILE__}/../")

require "#{ROOT_PATH}/config/environment"

Daemons.run("#{ROOT_PATH}/script/rails" , 
    :dir_mode => :system, 
    :log_output => true 
)

当我尝试运行它时:

bundle exec ./bin/admin run -- s

我得到这个错误:

/Users/info/.rvm/gems/ruby-1.9.3-p286/gems/rake-0.8.7/lib/rake/alt_system.rb:32: Use RbConfig instead of obsolete and deprecated Config.
=> Booting WEBrick
=> Rails 3.0.5 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
configuration /config.ru not found
Exiting

config.ru 文件肯定在那里。当我尝试使用命令行手动执行该应用程序时,我可以运行该应用程序,但由于某种原因,我可以守护程序 rails app 。

我将不胜感激任何帮助,因为我整天都在努力解决这个问题。

干杯

【问题讨论】:

  • 一些简单的尝试 - 将 Rails 更新到最新版本和/或使用瘦而不是 WEBrick(我想我以前在 Mac 上看到过 WEBrick 的错误)。即使他们不解决这个问题,你也会领先...
  • @BradWerth 感谢您的帮助,我只是尝试使用 sudo bundle exec ./bin/admin run -- s thin -p 80 来做瘦,但是我得到了完全相同的错误,找不到配置 /config.ru –
  • 更新导轨?我有 3.0.5 它没那么旧,你不觉得做这样的事情有风险吗?我的意思是我担心其他宝石会特别打破新版本使用资产,这是一大步。如果您不介意,让我问您,它在您的机器上工作吗?我的意思是,如果你和我做同样的事情,它会和你一起工作吗?
  • 实际上,3.0.5 已经很老了,就其背后的版本而言。 FWIW,我的生产应用程序都没有运行甚至落后一个版本。我觉得不更新是有风险的。这些版本包含许多与安全性相关的修复程序,并且可能还有一个可以解决您的问题。如果您谈论的是开发人员风险,它应该像启动验收测试(或手动检查整个应用程序)一样简单。可能不会有太多改变......

标签: ruby-on-rails ruby-on-rails-3 deployment daemon


【解决方案1】:

我知道这并不能直接解决您的守护进程问题,但如果您使用的是 linux,则基本上可以使用 start-stop-daemon 来做同样的事情。而且你不需要它的脚本,只需要在你的监控配置中使用一个衬垫,它使用 start-stop-daemon 来守护进程。

【讨论】:

    【解决方案2】:

    可能是因为daemons 没有在您的应用程序根目录中运行服务器?

    更新

    要从您的应用根目录以外的其他路径启动 Rails 服务器,请使用 rails server 命令的 -c 选项,该选项需要您的 config.ru 文件的确切路径。

    【讨论】:

    • 感谢您的帮助,但我正在从我的应用程序的根目录运行脚本,管理脚本位于我的 rails 项目的 /bin 目录中,我正在从内部运行它我的 rails 的根目录,有什么建议吗?
    • 实际上我将脚本移动到 rails 根目录,并直接使用 sudo bundle exec ./admin run -- s 运行它,但仍然得到完全相同的错误
    • 很抱歉,我不熟悉daemons gem。为了确保它在正确的目录中执行服务器,您可以运行命令 pwd 而不是 rails s 并查看它是否返回 rails 应用程序的根目录?我真的认为config.ru错误是因为执行服务器的路径。
    • 当然我在我的应用程序的根目录下,pwd 将生成 /Users/info/code/myApp,似乎守护进程将 chdir 设置为“ /" 总是,因为否则正在运行的守护进程可能会导致文件系统无法卸载。它在这里执行此操作:link 反正我真的不知道如何解决这个问题
    • 好吧,我不确定。另一种解决方案:rails s 命令作为-c 选项设置config.ru 文件的路径。可以试试吗?
    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2023-03-02
    • 1970-01-01
    相关资源
    最近更新 更多