如何避免 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 是这样的:

# gem 'rails', '3.2.21' 宝石'rails',git:'https://github.com/rails/rails.git',分支:'3-2-stable'

否则,您应该将 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 模块.. 弃用警告

覆盖 ActiveSupport::Concern 模块中由同一模块中的类方法定义的方法

如何使用groupby避免python中的循环

如何避免R中特定多条件语句中的循环