Rails gem 更新不工作(版本 4.1.1 到 4.2.0)作为 "warning: circular argument reference" 错误的解决方案

Rails gem update not working (version 4.1.1 to 4.2.0) as a solution to "warning: circular argument reference" error

当我 运行 任何类型的 rake 命令,特别是 rake db:seed 时,我不断收到以下错误,它将在没有完成的情况下中止:

$ rake db:seed
/Users/rachel/.rvm/gems/ruby-2.2.0@rails4.2/gems/activesupport-4.1.1/lib/active_support/values/time_zone.rb:285: warning: circular argument reference - now
rake aborted!
ActiveRecord::UnknownAttributeError: unknown attribute: description

我做了一些研究,发现这是一个错误(我认为?)由 Rails 4.1.9 中的不兼容 gem 引起,所以我希望创建一个新的 rvm 来更新 Rails 到 4.2.0 这样我就可以继续我的项目了。但是,每次我尝试更新 Rails 时,它都会显示 'installed' 但无法实际安装到我创建的 ruby 版本中。这是我尝试更新 Rails:

时的典型命令行模式
$ rvm gemset create rails420
ruby-2.2.0 - #gemset created /Users/rachel/.rvm/gems/ruby-2.2.0@rails420
ruby-2.2.0 - #generating rails420 wrappers........
$ rvm 2.2.0@rails420
$ gem install rails -v 4.2.0
Fetching: rails-4.2.0.gem (100%)
Successfully installed rails-4.2.0
Parsing documentation for rails-4.2.0
Installing ri documentation for rails-4.2.0
Done installing documentation for rails after 339 seconds
1 gem installed
$ rvm 2.2.0@rails420
$ rails --version
Rails 4.1.1

基本上,它会安装 Rails 4.2.0,但是当我在安装后立即检查版本时却说它没有安装。关于如何解决错误或让 Rails gem 在我的 rvm 中正确更新的任何想法?

尝试以下操作:

rvm use ruby-2.2.0@rails4.2 --create
gem install rails
rails -v

这应该给你 rails 4.2

导致 "warning: circular argument reference" 的问题是我项目 Gemfile.lock 中的文件与我正在安装的版本不匹配,因此它一直恢复到过时的版本并导致错误。

为了修复,我更新了所有 gem 集和 运行 清理以确保没有剩余的过时版本,然后 运行 以下命令:

rvm use --create 2.2.0@newtest
gem install rails
Fetching: rails-4.2.0.gem (100%)
Successfully installed rails-4.2.0
Parsing documentation for rails-4.2.0
Installing ri documentation for rails-4.2.0
Done installing documentation for rails after 326 seconds
1 gem installed
$ bundle install

然后我检查了版本以确保 activerecord、activesupport、rails 和 railties 都至少有 4.2.0。一旦我确定那些 gem 正在工作,我就在新更新的 rvm 中创建了一个新的 Rails 项目:

$ rvm use ruby-2.2.0@newtest
$rails new projectname

这使用 Rails 4.2.0 创建了一个新项目,它与正确的 gems 兼容以避免 "warning: circular argument reference" 错误,所以我不再看到它时我使用 rake 或任何其他命令。有关更详细的解释,请参阅 api.rubyonrails.org/classes/Rails/Railtie.html - Railtie 是协调 Rails 行为的 gem,如 rake,因此如果它已过时在你的 Gemfile.lock 但不在你的 Ruby rvm 中它会产生错误。

此问题现已解决。

http://weblog.rubyonrails.org/2015/6/16/Rails-3-2-22-4-1-11-and-4-2-2-have-been-released-and-more/

修复ruby 2.2 警告:循环参数引用 https://github.com/rails/rails/commit/8fd52705eda6a2cd7e9a8a5bc723fa094e359eb7

使用self.method语法解决循环参数问题 https://github.com/rails/rails/commit/3a30b12c774dfaa72acfe520e823374131631ea9