当我运行 rspec 时,我收到以下 ruby 1.9.3-p125 的弃用警告。但是 ruby 1.9.2 没有弃用的警告。
/gems/ruby-1.9.3-p125@cs/gems/soap4r-1.5.8/lib/xsd/iconvchars
et.rb:9:in `<top (required)>': iconv will be deprecated in the future, use String#encode instead.
/home/ec2-user/.rvm/gems/ruby-1.9.3-p125@cs/gems/hpricot-0.8.2/lib/hpricot/build
er.rb:2:in `require': /gems/ruby-1.9.3-p125@cs/gems/hpricot-0
.8.2/lib/fast_xs.so: undefined symbol: ruby_digitmap - /gems/
ruby-1.9.3-p125@cs/gems/hpricot-0.8.2/lib/fast_xs.so (LoadError)
这里的原因可能是什么?有人可以帮忙吗?
有一个关于 ruby 1.9.3 的建议是将 stdlibs 移动到 gems。作为此转换的一部分,不同字符串编码之间的转码将被"gemized",请参阅Wiki(部分:哪些stdlibs应该被gemized?)。
因此,每次调用 iconv 时,都会显示弃用通知,以通知开发人员未来版本的 ruby 不会使用 lib/iconv,并告诉他们(以及在哪里)需要修改代码来解释这些计划的更改。
目前这没有问题,因为 iconv 和 String#encode 都将得到支持,以便让开发人员有时间进行过渡。 但您应该记住,如果您不切换已弃用的代码,您的代码将在将来的版本中中断。
快速的Google搜索将帮助您进行过渡,例如"从Iconv#iconv到String#encode",如有必要。 如果您不打算进行该更改,则应远离将来的版本,并在更新环境时格外小心。
日志条目告诉您问题是在 soap4r gem 中生成的。看起来宝石有一段时间没有更新了,版本 1.5.8 是从 2007 年开始的所以 ruby 1.9.3 也可能有其他问题。
有一个项目声称拥有 ruby-1.9 兼容版本:肥皂4R-红宝石1.9
还有其他红宝石的肥皂库,在这里你可以看到其中的一些:红宝石工具箱搜索肥皂
你的问题实际上出在 hpricot 上,它显然与 ruby 1.9.3 不兼容,并且抛出你在这里看到的"未定义的符号:ruby_digitmap"。这是其他人有同样的问题。
不幸的是,hpricot不再维护,所以除非有人接过地幔,否则可能不会有修复。你的主要选择似乎是坚持使用 ruby 1.9.2,或者找到 hpricot 的替代品。大多数人似乎都在使用 nokogiri 在 ruby 中进行 XML 和 HTML 解析,但肯定还有其他选择。
要删除此警告...
转到您的 .rvm 目录并找到iconv.c
(我的在 ~/.rvm/src/ruby-1.9.3-p125/ext/iconv/iconv.c
)
编辑该文件删除或注释掉对warn_deprecated()
的调用(应靠近底部)
从该文件的目录中,先运行ruby extconf.rb
,然后运行make
然后make install
应该做这个技巧