4

我在 Linux 上运行 rails 版本 3.2.8 和 ruby​​ 版本 1.9.3-p286

user1@company.com [~/rails_apps/myapp]# rails -v
Rails 3.2.8
user1@company.com [~/rails_apps/myapp]# ruby -v
ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]
user1@company.com [~/rails_apps/myapp]#

我可以生成迁移,但无法运行它。我不断收到以下错误消息

user1@company.com [~/rails_apps/myapp]# rake db:migrate
/home3/user1/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/yaml.rb:56:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
/home3/user1/ruby/gems/gems/json-1.7.5/lib/json/common.rb:67: [BUG] unknown type 0x22 (0xc given)
ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]
<snip>

然后是很多调试信息

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

Aborted
user1@company.com [~/rails_apps/myapp]#

我安装了 libyaml

rvm pkg install libyaml

然后重新安装红宝石

rvm reinstall ruby-1.9.3-p286

但这并没有帮助。

为什么我不断收到此错误消息的任何其他想法?

谢谢。

4

2 回答 2

2

您需要在系统上安装libtool包,否则libyaml将无法编译。对于 Ubuntu 尝试:

sudo apt-get install libtool
rvm pkg install libyaml
rvm pkg install libyaml-dev
rvm reinstall 1.9.3

您也可以简单地使用发行版的包管理器来安装库而不是 rvm。对于 Ubuntu:

sudo apt-get install libyaml libyaml-dev

于 2012-10-30T03:09:49.780 回答
0

这里有两个不同的问题,一个是 Yaml 产生的警告,一个是来自 JSON gem 的错误。

警告是:

/home3/user1/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/yaml.rb:56:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.

这不一定是问题,您的 Ruby 安装将回退到使用旧的 Syck Yaml 库。Syck 已从 Ruby 2 中删除,因此您最终需要解决它,但这不是目前的主要问题。

在 Yaml 警告之后,您会立即收到以下信息:

/home3/user1/ruby/gems/gems/json-1.7.5/lib/json/common.rb:67: [BUG] unknown type 0x22 (0xc given)
ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]

这是来自 JSON gem 的错误。JSON gem 使用本机扩展,我认为这个错误来自使用安装了早期版本的 Ruby 和更高版本的 gem。尝试重新安装您的 gems(尤其是json)来解决这个问题。

于 2012-10-30T03:46:43.783 回答