【发布时间】:2017-01-11 18:48:50
【问题描述】:
为我们的 Rails 3.2.22.2 应用程序测试升级到 Ruby 2.3.3,并得到一个奇怪的情况,我们将一个数组作为第一个参数传递给 Tempfile.new,但它最终以散列形式结束。
我已修补 tempfile.rb 以输出传入的 basename 参数。
在irb 会话(非 Rails)中,一切正常:
> require 'tempfile'
true
> Tempfile.new(['test', '.csv'])
["home", ".csv"] # output of basename argument for Tempfile.new
=> #<Tempfile:/var/blah/test###.csv>
在rails console 会话中:
> Tempfile.new(['test', '.csv'])
{"test"=>nil, ".csv"=>nil}
ArgumentError: unexpected prefix: {"test"=>nil, ".csv"=>nil}
from /path/to/ruby-2.3.3/lib/ruby/2.3.0/tmpdir.rb:113:in `make_tmpname'
一定是宝石之类的,但我终其一生都无法弄清楚为什么会发生这种情况,或者在哪里或是什么改变了这种行为。
关于如何调试的任何想法或建议?
【问题讨论】:
-
在你修补的 tempfile.rb 中
puts caller的输出是什么?
标签: ruby-on-rails ruby ruby-on-rails-3.2 ruby-2.3