您正在收到此弃用通知,导致图书馆某处要求iconv
。
iconv是由Matz创建的一个gem,可用于将字符串从一种格式转换为另一种格式。
例如,这通常用于:
Iconv.iconv('UTF-8//IGNORE', 'UTF-8', content)
的魔力这一点点花费,可能有无效字符,并将其转换为适当的UTF-8字符串中的UTF-8字符串。
已经决定在Ruby 1.9.3中我们不应该再使用iconv而是使用内置的String#encode。 encode
更强大,可以让你更灵活。
的理论是,上面的例子可以替换为:
string.encode("UTF-8", :invalid => :replace, :undef => :replace, :replace => "?")
在实践中看来这是imperfect。
这也导致了不到轻松的故事谁愿意支持1.8创业板的创作者:
content = RUBY_VERSION.to_f < 1.9 ?
Iconv.iconv('UTF-8//IGNORE', 'UTF-8', "content") :
"#{content}".encode(Encoding::UTF_8, :invalid => :replace, :undef => :replace, :replace => '')
所以,你有一个宝石的地方,是需要的iconv,找到它:
假设你的错误信息是:/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:240
打开向上/gems/activesupport-3.1.0/lib/active_support/dependencies.rb
上线240:
添加一行:
p caller if file =~ /iconv/
(刚过:load_dependency(file) { result = super }
)
你会得到一个大胖子的堆栈跟踪:
rake --tasks
/home/sam/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.6/lib/active_support/dependencies.rb:251:in `block in require': iconv will be deprecated in the future, use String#encode instead.
["/home/sam/.rvm/gems/ruby-1.9.3-p125/gems/calais-0.0.13/lib/calais.rb:5:in `'",
.. more omitted ..
这告诉我这是calais宝石。通过拉请求,我am not the first。拉并没有被猛拉英寸
根据不同的宝石,也有可能是没有这个错误的升级版,所以我建议你首先升级你的宝石。如果你运气不好,你可以与派生宝石的任务,不幸被卡住,以摆脱这种(例如,如果你拉的请求来解决它颓丧)
通过简单地添加“P呼叫者”上线load_dependency前行,并通过堆栈跟踪它变得很容易通过你的Gemfile洗牌和修复过时的期待宝石。 –
我认为最简单的方法就是在'load_dependency'之前简单地添加'puts'>>>>#{file.inspect}'',然后就可以看到哪个文件加载导致了这个消息。 –