ruby-on-rails - 在 Rails 3.2.22 上将 Ruby 2.0.0 升级到 2.1.0 的问题
问题描述
macOS 10.14.6 上的 Rails 3.2.22 和 Ruby 2.0.0。应用程序正常运行,所有测试均通过 - Rspec,427 次测试,0 次失败。
宝石被捆绑到/vendor/bundle
. 我曾经ruby-install
安装 ruby 版本并chruby
根据.ruby-version
文件自动切换。我还在Gemfile
Heroku 中定义了 ruby 版本。
# Gemfile
source 'https://rubygems.org'
ruby '2.0.0'
...
# .ruby-version
ruby-2.0.0
当我移至 Ruby 2.1.0 时Gemfile
,.ruby-version
我无法再bundle install
启动或启动应用程序:
$ bundle install
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems.rb:241:in `bin_path': can't find gem bundler (>= 0.a) (Gem::GemNotFoundException)
from /usr/local/bin/bundle:22:in `<main>'
$ foreman start
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems.rb:241:in `bin_path': can't find gem foreman (>= 0.a) (Gem::GemNotFoundException)
from /usr/local/bin/foreman:22:in `<main>'
我无法安装捆绑程序:
$ gem install bundler
ERROR: While executing gem ... (Gem::Exception)
Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
到目前为止我尝试了什么
如果我回到“Gemfile”中的 Ruby 2.0.0 并且-ruby-version
应用程序运行但 Rspec 失败并出现大量warning: already initialized constant
for和activerecord
,即使应用程序中没有任何变化,或者.activesupport
paper_trail
Gemfile
Gemfile.lock
让它在 Ruby 2.0.0 上再次运行的唯一方法是用bundle clean --force
新的bundle install
.
出现错误后,openssl
我从中删除了 Ruby 2.1.0~/.rubies/
并重新安装了选项,指定了我的openssl
安装路径(在从 中找到它之后brew
):
$ brew --prefix openssl@1.0
/usr/local/opt/openssl@1.0
$ ruby-install ruby 2.1.0 -- --with-openssl-dir=/usr/local/opt/openssl@1.0
Ruby 2.1.0 安装正确,我尝试安装bundler
我得到:
$ gem install budler
Fetching: bundler-2.1.4.gem (100%)
ERROR: Error installing bundler:
bundler requires Ruby version >= 2.3.0.
我安装了bundler
创建的特定版本Gemfile.lock
:
$ gem install bundler -v "1.17.3"
Fetching: bundler-1.17.3.gem (100%)
Successfully installed bundler-1.17.3
Parsing documentation for bundler-1.17.3
Installing ri documentation for bundler-1.17.3
Done installing documentation for bundler after 8 seconds
1 gem installed
但随后bundle install
未能说 Ruby 版本是 2.3.7:
$ bundle install
Your Ruby version is 2.3.7, but your Gemfile specified 2.1.0
$ ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin18.0]
看起来对 Ruby 2.3.7 的引用来自这里:
$ bundle env
## Environment
Bundler 1.17.3
Platforms ruby, universal-darwin-18
Ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
Full Path /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby
Config Dir /Library/Ruby/Site
RubyGems 2.5.2.3
Gem Home /Users/dan/.gem/ruby/2.1.0
Gem Path /Users/dan/.gem/ruby/2.1.0:/Users/dan/.rubies/ruby-2.1.0/lib/ruby/gems/2.1.0
User Path /Users/dan/.gem/ruby/2.3.0
Bin Dir /Users/dan/.gem/ruby/2.1.0/bin
Tools
Git 2.20.1 (Apple Git-117)
RVM not installed
rbenv not installed
chruby 0.3.9
我发现了这个问题:Bundler using wrong Ruby version with a comment to try hash -r
:“可能是您的 shell 缓存了旧的捆绑命令,请尝试运行 hash -r。-matt”
这似乎修复了 Bundle 中硬编码的 Ruby 版本:
$ hash -r
$ bundle env
## Environment
Bundler 1.17.3
Platforms ruby, x86_64-darwin-18
Ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin18.0]
Full Path /Users/dan/.rubies/ruby-2.1.0/bin/ruby
Config Dir /Users/dan/.rubies/ruby-2.1.0/etc
RubyGems 2.2.0
Gem Home /Users/dan/.gem/ruby/2.1.0
Gem Path /Users/dan/.gem/ruby/2.1.0:/Users/dan/.rubies/ruby-2.1.0/lib/ruby/gems/2.1.0
User Path /Users/dan/.gem/ruby/2.1.0
Bin Dir /Users/dan/.gem/ruby/2.1.0/bin
Tools
Git 2.20.1 (Apple Git-117)
RVM not installed
rbenv not installed
chruby 0.3.9
Bundle 现在引用 Ruby 2.1.0,我可以成功bundle install
但是现在我在运行 Rspec 或启动应用程序时遇到语法错误:
$ bundle exec rspec
WARNING: Nokogiri was built against LibXML version 2.9.10, but has dynamically loaded 2.9.4
/Users/dan/Documents/code/lessonmate/vendor/bundle/gems/browser-5.1.0/lib/browser/browser.rb:9:in `require_relative': /Users/dan/Documents/code/lessonmate/vendor/bundle/gems/browser-5.1.0/lib/browser/accept_language.rb:37: syntax error, unexpected '.' (SyntaxError)
code&.downcase
$ bundle exec rails server
/Users/dan/Documents/code/lessonmate/vendor/bundle/gems/uniform_notifier-1.12.0/lib/uniform_notifier.rb:3:in `require': /Users/dan/Documents/code/lessonmate/vendor/bundle/gems/uniform_notifier-1.12.0/lib/uniform_notifier/base.rb:37: syntax error, unexpected <<, expecting keyword_end (SyntaxError)
<<~CODE
^
使用 Ruby 2.0.0:
$RUBY_ROOT /Users/dan/.rubies/ruby-2.0.0-p648
$RUBY_ENGINE ruby
$RUBY_VERSION 2.0.0
$GEM_ROOT /Users/dan/.rubies/ruby-2.0.0-p648/lib/ruby/gems/2.0.0
$GEM_HOME /Users/dan/.gem/ruby/2.0.0
$GEM_PATH /Users/dan/.gem/ruby/2.0.0:/Users/dan/.rubies/ruby-2.0.0-p648/lib/ruby/gems/2.0.0
$PATH /Users/dan/.gem/ruby/2.0.0/bin:/Users/dan/.rubies/ruby-2.0.0-p648/lib/ruby/gems/2.0.0/bin:/Users/dan/.rubies/ruby-2.0.0-p648/bin:/Users/dan/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/dan/bin:/Users/dan/bin
$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 2.0.14.1
- RUBY VERSION: 2.0.0 (2015-12-16 patchlevel 648) [x86_64-darwin18.7.0]
- INSTALLATION DIRECTORY: /Users/dan/.gem/ruby/2.0.0
- RUBY EXECUTABLE: /Users/dan/.rubies/ruby-2.0.0-p648/bin/ruby
- EXECUTABLE DIRECTORY: /Users/dan/.gem/ruby/2.0.0/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-18
- GEM PATHS:
- /Users/dan/.gem/ruby/2.0.0
- /Users/dan/.rubies/ruby-2.0.0-p648/lib/ruby/gems/2.0.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
使用 Ruby 2.1.0:
$RUBY_ROOT /Users/dan/.rubies/ruby-2.1.0
$RUBY_ENGINE ruby
$RUBY_VERSION 2.1.0
$GEM_ROOT /Users/dan/.rubies/ruby-2.1.0/lib/ruby/gems/2.1.0
$GEM_HOME /Users/dan/.gem/ruby/2.1.0
$GEM_PATH /Users/dan/.gem/ruby/2.1.0:/Users/dan/.rubies/ruby-2.1.0/lib/ruby/gems/2.1.0
$PATH /Users/dan/.gem/ruby/2.1.0/bin:/Users/dan/.rubies/ruby-2.1.0/lib/ruby/gems/2.1.0/bin:/Users/dan/.rubies/ruby-2.1.0/bin:/Users/dan/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/dan/bin:/Users/dan/bin
$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 2.2.0
- RUBY VERSION: 2.1.0 (2013-12-25 patchlevel 0) [x86_64-darwin18.0]
- INSTALLATION DIRECTORY: /Users/dan/.gem/ruby/2.1.0
- RUBY EXECUTABLE: /Users/dan/.rubies/ruby-2.1.0/bin/ruby
- EXECUTABLE DIRECTORY: /Users/dan/.gem/ruby/2.1.0/bin
- SPEC CACHE DIRECTORY: /Users/dan/.gem/specs
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-18
- GEM PATHS:
- /Users/dan/.gem/ruby/2.1.0
- /Users/dan/.rubies/ruby-2.1.0/lib/ruby/gems/2.1.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /Users/dan/.gem/ruby/2.1.0/bin
- /Users/dan/.rubies/ruby-2.1.0/lib/ruby/gems/2.1.0/bin
- /Users/dan/.rubies/ruby-2.1.0/bin
- /Users/dan/bin
- /usr/local/bin
- /usr/bin
- /bin
- /usr/sbin
- /sbin
- /Users/dan/bin
- /Users/dan/bin
解决方案
推荐阅读
- python - “十进制”类型的对象不是 JSON 可序列化的
- angular - Ngrx-Component / VSCode - 嵌入式模板上的任何指令都没有使用属性绑定ngrxLet
- c++ - C++ 应用程序由于未知原因而崩溃?
- json - 在 JOLT 中验证和转换数组对象
- android - Android中使用JSON数据但没有页码作为API参数的分页
- security - 如何保护使用 ado.net 开发的 web api?
- python - 如何在 django 的布尔字段中添加单选按钮
- r - 将时间从数字转换为 HMS 格式
- mysql - XAMPP 中的 MySQL 不再启动。端口不是问题
- azure-data-factory - ADF 动态参数 - 错误:验证签名失败,因为内容被篡改