每当 rails 时都找不到耙子
Could not find rake using whenever rails
你好,我有一个奇怪的问题,我试图让 rake 任务在任何时候工作,但是有这个问题 Could not find rake-10.4.2 in any of the sources (Bundler::GemNotFound)
。很奇怪,因为它在 ruby 2.1.2 版本 /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/spec_set.rb:92
中搜索这个 rake 版本。但是我在 rvm 中使用 ruby 2.2.0 并且 gem 列表也在使用该版本。
这是一个简单的 cron 作业:
every 1.minute do
rake 'process_email:handle', output: 'log/mail.log', environment: 'development'
end
Rakefile:
namespace :process_email do
desc 'Handle email'
task handle: :environment do
MOBIZARD_MAILER.processor.retrieve_mail
end
end
Mobizard 邮件程序是我自己的 gem,它通过 ruby 邮件 gem 检索邮件,使用相同的 ruby 2.2.0 和相同的 gem列表。
mail.log 中的整个堆栈跟踪如下所示:
/home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/spec_set.rb:92:in `block in materialize': Could not find rake-10.4.2 in any of the sources (Bundler::GemNotFound)
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/spec_set.rb:85:in `map!'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/spec_set.rb:85:in `materialize'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/definition.rb:133:in `specs'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/definition.rb:178:in `specs_for'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/definition.rb:167:in `requested_specs'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/environment.rb:18:in `requested_specs'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/runtime.rb:13:in `setup'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler.rb:120:in `setup'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/setup.rb:17:in `<top (required)>'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
感谢回答。
这是因为输出设置了-l
标志,rvm错误地解释了它。
您可以在此处阅读有关此问题的更多信息:
TL;DR
将此添加到 schedule.rb
ENV.each { |k, v| env(k, v) }
参考:https://github.com/javan/whenever/issues/656
我的猜测是 GEM_PATH
在 crontab 中 运行 和在 normal/dev 环境中 运行 时是不一样的。你可以检查它是哪个命令
gem which rake
在我的案例中:
- 当 crontab
GEM_PATH
中的 运行 类似于 /usr/local/lib/ruby/site_ruby/2.3.0/bundle
- 当运行在"normal"时,
GEM_PATH
是/usr/local/bundle
此脚本 ENV.each { |k, v| env(k, v) }
将自动添加这些环境以确保 ruby 使用正确的 GEM_PATH
引自此回答
The -l option (according to the man page) makes "bash act as if it had been invoked as a login shell". Login shells read certain initialization files from your home directory, such as .bash_profile
. Since you set the value of TEST in your .bash_profile
, the value you set on the command line gets overridden when bash launches.
所以@Yury 的回答可能是因为该命令在 .bash_profile
中执行了某些操作,我猜它更新了 rvm 的 GEM_PATH。
你好,我有一个奇怪的问题,我试图让 rake 任务在任何时候工作,但是有这个问题 Could not find rake-10.4.2 in any of the sources (Bundler::GemNotFound)
。很奇怪,因为它在 ruby 2.1.2 版本 /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/spec_set.rb:92
中搜索这个 rake 版本。但是我在 rvm 中使用 ruby 2.2.0 并且 gem 列表也在使用该版本。
这是一个简单的 cron 作业:
every 1.minute do
rake 'process_email:handle', output: 'log/mail.log', environment: 'development'
end
Rakefile:
namespace :process_email do
desc 'Handle email'
task handle: :environment do
MOBIZARD_MAILER.processor.retrieve_mail
end
end
Mobizard 邮件程序是我自己的 gem,它通过 ruby 邮件 gem 检索邮件,使用相同的 ruby 2.2.0 和相同的 gem列表。
mail.log 中的整个堆栈跟踪如下所示:
/home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/spec_set.rb:92:in `block in materialize': Could not find rake-10.4.2 in any of the sources (Bundler::GemNotFound)
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/spec_set.rb:85:in `map!'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/spec_set.rb:85:in `materialize'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/definition.rb:133:in `specs'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/definition.rb:178:in `specs_for'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/definition.rb:167:in `requested_specs'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/environment.rb:18:in `requested_specs'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/runtime.rb:13:in `setup'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler.rb:120:in `setup'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/setup.rb:17:in `<top (required)>'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/vyivrain/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
感谢回答。
这是因为输出设置了-l
标志,rvm错误地解释了它。
您可以在此处阅读有关此问题的更多信息:
TL;DR
将此添加到 schedule.rb
ENV.each { |k, v| env(k, v) }
参考:https://github.com/javan/whenever/issues/656
我的猜测是 GEM_PATH
在 crontab 中 运行 和在 normal/dev 环境中 运行 时是不一样的。你可以检查它是哪个命令
gem which rake
在我的案例中:
- 当 crontab
GEM_PATH
中的 运行 类似于/usr/local/lib/ruby/site_ruby/2.3.0/bundle
- 当运行在"normal"时,
GEM_PATH
是/usr/local/bundle
此脚本 ENV.each { |k, v| env(k, v) }
将自动添加这些环境以确保 ruby 使用正确的 GEM_PATH
引自此回答
The -l option (according to the man page) makes "bash act as if it had been invoked as a login shell". Login shells read certain initialization files from your home directory, such as
.bash_profile
. Since you set the value of TEST in your.bash_profile
, the value you set on the command line gets overridden when bash launches.
所以@Yury 的回答可能是因为该命令在 .bash_profile
中执行了某些操作,我猜它更新了 rvm 的 GEM_PATH。