当我尝试将我们的网站更新到Ruby 3.0.0时,我得到这个错误:
ArgumentError(参数数目错误(给定2个,应为1个))
% rails console
Loading development environment (Rails 6.1.0)
irb(main):001:0> puts RUBY_VERSION
3.0.0
irb(main):002:0> puts IceCube::VERSION
0.16.3
irb(main):003:0> schedule = IceCube::Schedule.new
=> #<IceCube::Schedule:0x00007fccfe19cfa8 @start_time=2020-12-27 11:14:30 -0800, @all_recurrence_rules=[], @all_exception_rules=[]>
irb(main):004:0> puts schedule.to_ical
Traceback (most recent call last):
1: from (irb):4:in `<main>'
ArgumentError (wrong number of arguments (given 2, expected 1))
下面是Ruby 2.7.2中的相同命令
% rails console
Loading development environment (Rails 6.1.0)
irb(main):001:0> puts RUBY_VERSION
2.7.2
irb(main):002:0> puts IceCube::VERSION
0.16.3
irb(main):003:0> schedule = IceCube::Schedule.new
=> #<IceCube::Schedule:0x00007f9da3128fe8 @start_time=2020-12-27 11:12:50 -0800, @all_recurrence_rules=[], @all_exception_rules=[]>
irb(main):004:0> puts schedule.to_ical
DTSTART;TZID=PST:20201227T111250
令人困惑的是,它还可以使用与第一个示例 * 具有相同gem版本 * 的普通ruby脚本
% irb
irb(main):001:0> puts RUBY_VERSION
3.0.0
irb(main):002:0> gem 'ice_cube'
irb(main):003:0> require 'ice_cube'
irb(main):004:0> puts IceCube::VERSION
0.16.3
irb(main):005:0> schedule = IceCube::Schedule.new
=> #<IceCube::Schedule:0x00007ff2fb0d5b88 @start_time=2020-12-27 11:11:02 -0800, @all_recurrence_rules=[], @all_exception_rules=[]>
irb(main):006:0> puts schedule.to_ical
DTSTART;TZID=PST:20201227T111102
有人知道我可以从哪里开始修复这个问题吗?我们刚刚开始这个项目,我希望使用Ruby3
1条答案
按热度按时间n3ipq98p1#
TL;DR:
ice_cube
0.16.4 has already sorted out这些与ruby 3.x的兼容性问题,所以只是升级。这个问题与how keyword arguments are handled in ruby 3.0以及
ice_cube
如何将其参数传递给I18n.localize
有关。因此,提取并简化了有缺陷的代码,这在ruby〈3上是有效的
从Ruby〉= 3
因此,我可以看到的修复方法是显式地将参数传递给方法:
或者按照the involved module:
发送一个PR,使用你自己的叉子,猴子补丁,任何对你最有效的。
但最重要的是,做好准备在很多其他gem中发现这个问题,因为第一个稳定的ruby 3版本刚刚发布2 days ago,所以你可能会在其他gem中遇到这类问题,特别是那些未维护的gem。