执行bundle exec rake secret提示bad interpreter且Ruby版本不一致怎么解决
问题1:rbenv显示的Ruby版本与
ruby -v输出不一致的原因 看你贴的gem env里的SHELL PATH输出,/usr/local/bin、/usr/bin等系统路径排在/Users/****/.rbenv/shims前面。rbenv的实现原理是靠将shims目录放在PATH最优先级,劫持所有Ruby相关命令的调用,现在系统路径优先级更高,会优先调用系统预装的Ruby 2.6.3版本,rbenv的版本切换配置自然不会生效。
修复方法:
- 打开
~/.bash_profile,确认是否添加了rbenv的初始化配置,没有的话追加以下两行:
export PATH="$HOME/.rbenv/shims:$PATH" eval "$(rbenv init -)"
- 执行
source ~/.bash_profile让配置生效 - 执行
echo $PATH确认/Users/****/.rbenv/shims排在PATH的最开头,此时再执行ruby -v就会显示rbenv指定的2.3.0版本。
问题2:无法执行
bundle exec rake secret的原因 你当前/usr/local/bin/bundle是早期使用Ruby 2.3版本安装的,文件头的shebang指定了已不存在的/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby路径,所以会报bad interpreter错误。你之前执行的sed命令写错了路径(缺少开头的/,正确路径是/usr/local/bin/bundle),且该问题不是换行符导致的,所以修复无效。
修复方法:
在完成上述rbenv配置、确认ruby -v输出为2.3.0后,执行以下操作:
- 执行
gem install bundler -v '~> 1.17'安装适配Ruby 2.3和Rails 5.0的bundler版本 - 执行
rbenv rehash刷新命令映射 - 执行
which bundle,正常会返回/Users/****/.rbenv/shims/bundle,此时再执行bundle exec rake secret即可正常运行。
额外避坑提示
- 你之前修改
secrets.yml里的环境变量大小写没有意义,Heroku环境变量大小写敏感,你需要在Heroku后台设置对应大小写的secret_key_base变量才可以解决部署报错,删除本地的SECRET_KEY_BASE变量对Heroku运行的应用没有任何影响 - 不要随意删除Heroku自动生成的DATABASE相关环境变量,删除后会导致应用无法连接数据库,后续会出现新的部署错误
内容的提问来源于stack exchange,提问作者Marchan4
相关产品推荐
相关产品推荐

