rvm和bundler - RedCloth gem和rake的问题

时间:2011-04-08 14:46:32

标签: ruby rubygems gem rvm bundler

我设置了一个本地项目来使用rvm,使用项目特定的gemset,并使用“bundle package”将所有宝石放入供应商/缓存中。然后我把它全部检查到源代码控制中。

现在,在服务器上,我已经安装了rvm(同样的ruby-ruby-1.8.7-p302)并再次制作了一个gemset。我查看了项目文件夹,cd了进去(我现在在右边的rvm和gemset)。我以为我可以从供应商/缓存中的宝石安装“捆绑安装”。但RedCloth的宝石正在倒下:

Using rake (0.8.7) 
Installing RedCloth (4.2.3) with native extensions 
/opt/ruby-enterprise-1.8.7-2011.01/lib/ruby/site_ruby/1.8/rubygems/installer.rb:529:in
`build_extensions': ERROR: Failed to build gem native extension. 
(Gem::Installer::ExtensionBuildError)

        /opt/ruby-enterprise-1.8.7-2011.01/bin/ruby extconf.rb 

Gem files will remain installed in 
/home/deploy/.rvm/gems/ruby-1.8.7-p302@akrotoski/gems/RedCloth-4.2.3 for inspection.

到目前为止,这是我对“宝石列表”所拥有的内容:

*** LOCAL GEMS ***

bundler (1.0.11)
rake (0.8.7)
RedCloth (4.2.7)

这很奇怪 - 尽管它试图构建RedCloth正在下降它认为已经安装了。

奇怪的是,错误消息是指ruby的“系统”版本,而不是当前rvm的版本。当前的rvm肯定已激活:

rvm list
>> rvm rubies
>> => ruby-1.8.7-p302 [ x86_64 ]

which ruby
>> /home/deploy/.rvm/rubies/ruby-1.8.7-p302/bin/ruby

which gem
>> /home/deploy/.rvm/rubies/ruby-1.8.7-p302/bin/gem

我在这一点上很困惑......一个潜在的问题可能是在我的本地机器(32位)我有i386版本的ruby-1.8.7-p302,而在我的服务器上我有x86_64版本 - 可能导致这个问题吗?

感谢任何建议 - 最多

1 个答案:

答案 0 :(得分:2)

第一步:使用 bundler

供应商一切

以防这是一篇关于如何vendor everything的优秀博客文章(这意味着不包括使用gemsets)。我指的是这个,因为在我看来,有一种危险的捆绑器和混合物的混合物。你环境中的宝石。如果你供应所有东西(最安全的),那就不需要宝石了......

第2步:在项目的根目录中包含 .rvmrc

好的,这在前面提到的博文中有解释:当你在项目中进行cd时,它会确保你处于相同的ruby版本中(但似乎已经是这种情况了......)

第3步:运行bundle install --deployment

deployment选项表示将自动使用缓存的gem。这可以确保您的生产环境完全反映您的开发人员。

希望它能解决问题...