如何避免 activesupport 中的循环参数引用警告
Posted
技术标签:
【中文标题】如何避免 activesupport 中的循环参数引用警告【英文标题】:How do I avoid the circular argument reference warning in activesupport 【发布时间】:2015-02-27 07:38:04 【问题描述】:。发生在 ruby 2.2.0 上
/home/ec2-user/apps/foo_prod/shared/bundle/ruby/2.2.0/gems/activesupport-3.2.21/lib/active_support/values/time_zone.rb:270: warning: circular argument reference - now
/home/ec2-user/apps/foo_prod/shared/bundle/ruby/2.2.0/gems/ruby-ole-1.2.11.7/lib/ole/types/base.rb:265: warning: duplicated key at line 266 ignored: 4095
【问题讨论】:
【参考方案1】:使用 Rails 3.2.22
gem 'rails', '3.2.22'
或
版本 1.2.11.8 中的警告修复:
bundle update ruby-ole
【讨论】:
【参考方案2】:这是 Active Support 的问题,已通过以下两次提交修复:
https://github.com/rails/rails/commit/8fd52705eda6a2cd7e9a8a5bc723fa094e359eb7 https://github.com/rails/rails/commit/3a30b12c774dfaa72acfe520e823374131631ea9不幸的是,这些提交从未包含在 3.2 版本中, 因为当前的最新版本(v3.2.21)于 2014 年 11 月 18 日发布 之后这些提交被合并了。
如果你不想看到这个警告信息绝对,你应该改变
你的Gemfile
是这样的:
否则,您应该将 ruby 降级到 2.1 或等待 v3.2.22 的发布, 直到发现一个严重的安全漏洞才会出现。
毕竟,没有简单的方法可以避免这个问题。更改Gemfile
因为在我看来,这种微不足道的烦恼可能是一种过度反应。
这会大大延迟您的部署过程。
【讨论】:
3.2.22 现已发布,并进行了此修复。 @Hisham 感谢您的更新。发布公告在这里:weblog.rubyonrails.org/2015/6/16/… 所以我猜现在建议使用gem 'rails', '3.2.22'
(根据 shilovk 的回答)修复 Gemfile,而不是依赖 Git 存储库。 (当然,到现在为止,要考虑将网站升级到 7 岁以下的更高版本的 Rails ......)【参考方案3】:
我没有在我的应用程序中使用指南针根据这篇文章here,我将我的 Rails 版本从 4.1.1 升级到了 4.1.9,它可以工作。
【讨论】:
【参考方案4】:这是compass 问题here。他们还没有发布新版本,所以你可能需要等待它。
【讨论】:
这正是目前的问题,卸载当前版本后安装最新版本的指南针即可解决。步骤请参考我的回答。 这听起来很像 Compass 问题是针对与 ActiveSupport 中的不同的循环参数引用。【参考方案5】:这是我为解决这个问题所做的,我有最新的 ruby,但 gem 与它不兼容,所以经过近一天的战斗后,我使用 rvm 切换到较旧的 ruby 版本
从 ruby-2.2.1 到 ruby-2.0.0 ,
再一次,这不是 ruby 版本的问题,而是与 gem 不兼容,尝试并祝你好运。
【讨论】:
【参考方案6】:好吧,这里有一个解决方案: 尝试在您的 .rbenv/.rvm 文件夹中进行所有这些更改并更改这些文件:
https://github.com/tmm1/rails/commit/8fd52705eda6a2cd7e9a8a5bc723fa094e359eb7
【讨论】:
【参考方案7】:假设,更新到 Rails 4.2.0 - 您应该能够通过以下命令完成 - 应该可以修复此错误,尽管它对我没有用:
rvm use ruby-2.2.0@rails4.2 --create
gem install rails
rails -v
我也收到了相同的“循环参数错误”消息(我在这里发布了更多关于我尝试修复它失败的信息,如果我找到答案会更新:Rails gem update not working (version 4.1.1 to 4.2.0) as a solution to "warning: circular argument reference" error)。
【讨论】:
【参考方案8】:我更改了 time_zone.rb 文件,而不是 now=now
,我输入了 now=Time.now
并解决了问题。
【讨论】:
【参考方案9】:我也遇到了同样的问题,你可以通过以下步骤来解决它(对我有用)。
$ gem uninstall compass
$ gem update --system
$ gem install compass
【讨论】:
以上是关于如何避免 activesupport 中的循环参数引用警告的主要内容,如果未能解决你的问题,请参考以下文章
如何在数据库中获取原始的“created_at”值(不是转换为 ActiveSupport::TimeWithZone 的对象)
ActiveSupport::Concern 中的 InstanceMethods 模块.. 弃用警告