Redmine启动遇strscan版本冲突:如何切换至指定gem版本
环境信息
- Bundler 版本 2.4.20
- Rails 6.1.7.6
- 系统:Debian 11 + Apache
- Ruby版本:3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
启动报错
App 121717 output: Error: The application encountered the following error: You have already activated strscan 1.0.3, but your Gemfile requires strscan 3.0.7. Since strscan is a default gem, you can either remove your dependency on it or try updating to a newer version of bundler that supports strscan as a default gem. (Gem::LoadError)
本地strscan版本情况
执行gem list -d strscan命令,输出如下:
*** LOCAL GEMS *** strscan (3.0.7, 3.0.0) Authors: Minero Aoki, Sutou Kouhei, Charles Oliver Nutter Homepage: https://github.com/ruby/strscan Licenses: Ruby, BSD-2-Clause Installed at (3.0.7): /usr/local/rvm/gems/ruby-3.0.0 (3.0.0, default): /usr/local/rvm/rubies/ruby-3.0.0/lib/ruby/gems/3.0.0 Provides lexical scanning operations on a String.
解决步骤
要激活strscan 3.0.7并解决版本冲突,按以下操作执行:
通过Bundler确认版本加载
进入Redmine项目根目录,运行:bundle exec ruby -e "require 'strscan'; puts StrScan::VERSION"运行后如果输出
3.0.7,说明Bundler能正确加载指定版本。配置Apache/Passenger使用Bundler环境
如果用Passenger部署Redmine,修改Apache虚拟主机配置,添加以下内容(替换/path/to/redmine为你的Redmine实际路径):SetEnv RAILS_ENV production SetEnv BUNDLE_GEMFILE /path/to/redmine/Gemfile这样Passenger会严格按照Gemfile的依赖加载gem,避免版本混乱。
清理缓存并重新安装依赖
在Redmine目录下执行:bundle clean --force bundle install这会清理Gemfile未引用的旧gem,重新安装所有指定版本的依赖,确保strscan 3.0.7被正确纳入环境。
确保Apache使用正确的RVM环境
因为用了RVM管理Ruby环境,要让Apache进程使用安装了strscan 3.0.7的gemset,在Apache虚拟主机配置中添加:SetEnv PATH /usr/local/rvm/gems/ruby-3.0.0/bin:/usr/local/rvm/rubies/ruby-3.0.0/bin:$PATH SetEnv GEM_HOME /usr/local/rvm/gems/ruby-3.0.0 SetEnv GEM_PATH /usr/local/rvm/gems/ruby-3.0.0:/usr/local/rvm/gems/ruby-3.0.0@global配置完成后重启Apache生效。
内容的提问来源于stack exchange,提问作者etron770

