我有一个看起来像这样的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任务会在那种情况下加载呢?
此外,从命令行运行命令工作正常。混乱。
答案 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