Ruby on rails 为什么我会在生产rake任务中得到“没有这样的文件要加载--ruby debug”?

Ruby on rails 为什么我会在生产rake任务中得到“没有这样的文件要加载--ruby debug”?,ruby-on-rails,ruby,ruby-on-rails-3.1,rake,Ruby On Rails,Ruby,Ruby On Rails 3.1,Rake,我有一个看起来像这样的rake任务(crontab): 在测试和开发中都可以正常运行,但在prod中我遇到以下错误: rake aborted! no such file to load -- ruby-debug /usr/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require' /usr/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bund

我有一个看起来像这样的rake任务(crontab):

在测试和开发中都可以正常运行,但在prod中我遇到以下错误:

rake aborted!
no such file to load -- ruby-debug
/usr/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in  
   `require'
/usr/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in 
        `block (2 levels) in require'
好的,我检查了我的GEM文件,我有:

group :development, :test do
  gem 'ruby-debug19', :require => 'ruby-debug', :platforms => :ruby
...
生产环境应该忽略ruby调试需求。因此,我检查了RAILS_ENV,它是正确的:

$ echo $RAILS_ENV
production
在此基础上,注释掉了在这个rake任务中需要ruby调试的行。所以在我看来,bundle exec不可能尝试在prod中加载ruby调试。这可能与gemfile.lock有关吗?其中有一个ruby-debug19条目。但是为什么我的rake任务会在这种情况下加载它呢


此外,从命令行运行命令也可以正常工作。令人困惑

rails环境和bundler组是两个完全不同的东西。一方不知道另一方,尽管他们在你的案例中使用了类似的术语

作为一种解决方法,您可以在生产环境中使用
bundle安装--而无需进行开发测试
,告诉bundler不要安装这些组。或者,您可以在GEM文件中使用类似的内容:

unless ENV['RAILS_ENV'] == "production"
  gem 'ruby-debug19', :require => 'ruby-debug', :platforms => :ruby
end

这需要设置环境变量RAILS\u ENV。在
bundle安装
运行期间以及
bundle exec
运行期间(即始终)。

rails环境和bundler组是两件完全不同的事情。一方不知道另一方,尽管他们在你的案例中使用了类似的术语

作为一种解决方法,您可以在生产环境中使用
bundle安装--而无需进行开发测试
,告诉bundler不要安装这些组。或者,您可以在GEM文件中使用类似的内容:

unless ENV['RAILS_ENV'] == "production"
  gem 'ruby-debug19', :require => 'ruby-debug', :platforms => :ruby
end

这需要设置环境变量RAILS\u ENV。在
捆绑包安装
运行期间以及
捆绑包执行
运行期间(即始终)。

您需要做的就是使用ruby 1.9的“调试器”gem

gem install debugger

您所需要做的就是使用Ruby1.9的“调试器”gem

gem install debugger

您应该使用
group:development,:test
而不是这个奇怪的
ENV['RAILS\u ENV']
东西。是的,这通常是首选的,因为大多数人都是这样做的(有些部署脚本期望/支持)。env的东西大部分时间用于CI配置(例如Travis CI或某些Jenkins配置)或特殊部署环境(例如Heroku)。在我看来,我已经在做你在gemfile中建议的事情了——通过我的
组:dev等。你告诉我不要安装ruby debug,但我的gemfile中已经有了这种设置,而且这种方式已经有相当一段时间了。我部署的环境也是在我将
group
块添加到我的文件后构建的。简言之,我认为这并不能回答我的问题。@jcollum但您仍然需要告诉bundler您不希望使用/安装该组。这就是没有
所做的。Bundler然后会记住在
bundle exec
期间不加载哪些gem。默认情况下,Bundler安装所有组中的所有gem。同样,Bundler不知道您的
RAILS\u ENV
,也不会仅仅因为它有一个特定的值而改变任何东西。我的另一个问题是,为什么这只会通过crontab发生,而不会通过命令行发生。这告诉我捆绑安装不是问题所在(我不久前在我的帖子中添加了这一事实)。你应该使用
group:development,:test
而不是这个奇怪的
ENV['RAILS\u ENV']
东西。是的,这通常是首选的,因为大多数人都是这样做的(有些部署脚本需要/支持)。env的东西大部分时间用于CI配置(例如Travis CI或某些Jenkins配置)或特殊部署环境(例如Heroku)。在我看来,我已经在做你在gemfile中建议的事情了——通过我的
组:dev等。你告诉我不要安装ruby debug,但我的gemfile中已经有了这种设置,而且这种方式已经有相当一段时间了。我部署的环境也是在我将
group
块添加到我的文件后构建的。简言之,我认为这并不能回答我的问题。@jcollum但您仍然需要告诉bundler您不希望使用/安装该组。这就是没有
所做的。Bundler然后会记住在
bundle exec
期间不加载哪些gem。默认情况下,Bundler安装所有组中的所有gem。同样,Bundler不知道您的
RAILS\u ENV
,也不会仅仅因为它有一个特定的值而改变任何东西。我的另一个问题是,为什么这只会通过crontab发生,而不会通过命令行发生。这告诉我捆绑安装不是问题所在(我不久前在我的帖子中添加了这一事实)。你的应用程序中有需要“ruby调试”的地方吗?@FrederickCheung是的,但这在我的规范测试中。怀疑Rake是否会使用该代码。你的应用程序中是否有“ruby debug”要求?@FrederickCheung是的,但这在我的规范测试中。我怀疑Rake会使用那个代码。