我设置了一个本地项目来使用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版本 - 可能导致这个问题吗?
感谢任何建议 - 最多
答案 0 :(得分:2)
以防这是一篇关于如何vendor everything的优秀博客文章(这意味着不包括使用gemsets)。我指的是这个,因为在我看来,有一种危险的捆绑器和混合物的混合物。你环境中的宝石。如果你供应所有东西(最安全的),那就不需要宝石了......
好的,这在前面提到的博文中有解释:当你在项目中进行cd时,它会确保你处于相同的ruby版本中(但似乎已经是这种情况了......)
deployment选项表示将自动使用缓存的gem。这可以确保您的生产环境完全反映您的开发人员。
希望它能解决问题...