Rails 7+Whenever执行cron时提示找不到bundler 2.4.3求助
Rails 7中使用whenever gem执行cron任务的bundler版本问题
我是Rails新手,首次尝试用whenever gem在Rails 7中运行cron任务,但cron.log中出现bundler版本找不到的错误:
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': Could not find 'bundler' (2.4.3) required by your /Users/myname/mysite/Gemfile.lock. (Gem::GemNotFoundException) To update to the latest version installed on your system, run `bundle update --bundler`. To install the missing version, run `gem install bundler:2.4.3` from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:302:in `activate_bin_path' from /usr/bin/bundle:23:in `<main>'
我的sample.rake文件内容:
namespace :sample do desc "saying hi to cron" task test: :developement do puts 'hi cron' end end
schedule.rb文件内容:
set :output, "log/cron.log" every 1.minute do rake 'sample:test' end
本地已确认安装bundler 2.4.3:
gem list | grep bundle # 输出:bundler (2.4.3) bundler -v # 输出:Bundler version 2.4.3
已执行bundle update --bundler,也更新了Homebrew,但问题未解决。
解决步骤
1. 修正rake任务的拼写错误
sample.rake中的:developement是拼写错误,正确应为:development,修改后:
namespace :sample do desc "saying hi to cron" task test: :development do puts 'hi cron' end end
2. 让cron使用正确的Ruby环境
cron默认调用系统Ruby(这里是2.6版本),但你本地可能用rbenv/rvm管理其他Ruby版本,导致系统Ruby找不到你安装的bundler。在schedule.rb开头添加环境配置:
- 如果用rbenv:
env :PATH, ENV['PATH'] set :rbenv_root, '/Users/myname/.rbenv' # 替换成你的rbenv根目录 set :rbenv_ruby, '3.2.2' # 替换成你实际使用的Ruby版本
- 如果用rvm:
env :PATH, ENV['PATH'] set :rvm_ruby_string, '3.2.2' # 替换成你的Ruby版本
3. 直接指定bundler绝对路径执行任务
先通过which bundle获取bundler的绝对路径:
which bundle # 示例输出:/Users/myname/.rbenv/shims/bundle
修改schedule.rb中的任务调用方式:
every 1.minute do command "/Users/myname/.rbenv/shims/bundle exec rake sample:test" end
4. 重新生成cron配置
修改完成后,更新crontab:
bundle exec whenever --update-crontab
内容的提问来源于stack exchange,提问作者Russ11
相关产品推荐
相关产品推荐

