You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Whenever管理Cron部署报错:库版本不兼容

问题描述

我们使用Whenever工具管理Cron任务,近期部署时触发如下错误:

4: from /var/www/sites/opencaseware-prod/shared/bundle/ruby/2.7.0/gems/chronic-0.10.2/lib/chronic.rb:1:in `require'
3: from /usr/lib/ruby/2.7.0/time.rb:3:in `<top (required)>'
2: from /usr/lib/ruby/2.7.0/time.rb:3:in `require'
1: from /var/www/sites/opencaseware-prod/shared/bundle/ruby/2.7.0/gems/date-3.3.3/lib/date.rb:4:in `<top (required)>'
/var/www/sites/opencaseware-prod/shared/bundle/ruby/2.7.0/gems/date-3.3.3/lib/date.rb:4:in `require': incompatible library version - /var/www/sites/opencaseware-prod/shared/bundle/ruby/2.7.0/gems/date-3.3.3/lib/date_core.so (LoadError)

运行环境:Ruby 2.7.6、Rails 5.2、Ubuntu 18.10

解决方案
  • 清理重建Gem依赖
    删除缓存的依赖包,重新安装确保本地扩展和系统环境匹配:

    bundle clean --force
    rm -rf vendor/bundle
    bundle install --deployment
    

    先确认当前终端使用的Ruby版本是2.7.6(用ruby -v检查),如果用rbenv/rvm,切换到对应版本后再执行。

  • 锁定date gem到兼容版本
    Ruby 2.7.x自带的date gem版本和3.3.3存在兼容性冲突,在Gemfile中添加锁定:

    gem 'date', '~> 2.0.0'
    

    执行bundle install后,这个版本是Ruby 2.7原生适配的,不会出现扩展库版本不兼容问题。

  • 修复系统依赖并重新编译扩展
    Ubuntu 18.10的系统库较旧,先安装Ruby编译所需依赖:

    sudo apt-get update
    sudo apt-get install ruby-dev build-essential libssl-dev libreadline-dev zlib1g-dev
    

    然后重新编译date gem的本地扩展:

    bundle exec gem uninstall date
    bundle exec gem install date -v 3.3.3 --platform=ruby
    
  • 对齐Whenever的执行环境
    确保Cron任务使用的Ruby环境和应用一致,在config/schedule.rb开头指定路径:

    env :PATH, ENV['PATH']
    set :ruby_path, '/usr/local/rbenv/versions/2.7.6/bin/ruby' # 替换成你的Ruby实际路径
    

    重新生成Cron任务:

    bundle exec whenever --update-crontab
    

内容的提问来源于stack exchange,提问作者user1130176

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:35:20