为什么我会在生产rake任务中得到`没有这样的文件加载 - ruby​​-debug`?

时间:2012-03-13 20:22:52

标签: ruby-on-rails ruby ruby-on-rails-3.1 rake

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

cd /data/TheApp/current && bundle exec rake nightly_tasks[3] 
   --trace --silent 2>> /data/TheApp/shared/log/tasks_prod_errors.log

这一切在test和dev中运行良好,但是在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'

好的,所以我检查我的gemfile,我有这个:

group :development, :test do
  gem 'ruby-debug19', :require => 'ruby-debug', :platforms => :ruby
...

生产环境应该忽略ruby-debug要求。所以我检查了我的RAILS_ENV,这是正确的:

$ echo $RAILS_ENV
production

最重要的是,在此rake任务中用于要求ruby调试的行已被注释掉。所以对我来说,看起来bundle exec无法尝试在prod中加载ruby-debug。这可能与gemfile.lock有关吗?那里有一个ruby-debug19的条目。但是为什么我的rake任务会在那种情况下加载呢?

此外,从命令行运行命令工作正常。混乱。

2 个答案:

答案 0 :(得分:4)

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

作为一种解决方法,您可以在生产中使用bundle install --without development test告诉bundler不安装这些组。或者,你可以在你的Gemfile中使用这样的东西:

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

预计您将设置环境变量RAILS_ENV。在bundle install运行期间以及bundle exec运行期间(即始终)。

答案 1 :(得分:0)

您需要做的就是使用ruby 1.9的“debugger”gem。

gem install debugger