假设我想在同一台服务器上安装不同版本的rails。然后,我希望能够在同一台服务器上安装多个ruby应用程序,最少重复的文件以节省磁盘空间。但是,我仍然希望避免依赖性问题,宝石冲突问题和其他问题。
我们还假设每个应用都有额外的宝石,我只需要它的本地项目宝石集。
@global
gemset中
@rails3
gemset中,将 Rails 2 安装到@rails2
集合中...然后克隆我需要的每个项目?rvm use ree@rails3 && rvm gemset export rails3.gems
rvm use ree@rails2 && rvm gemset export rails2.gems
rvm use --create ree@project1-on-rails3 && rvm gemset import rails3.gems
rvm use --create ree@project2-on-rails2 && rvm gemset import rails2.gems
答案 0 :(得分:3)
注意:假设您使用Bundler来管理您的gem依赖项,我写了整个响应。我意识到有些人没有,你在你的问题中没有提到Bundler。如果你没有使用Bundler,我会指出它可能是节省磁盘空间的最佳方法(只有你bundle install --system
时才这样!)。如果您使用导出的gemsets来管理依赖项,我认为您的方案听起来很合理,但我没有经验。
Rails 3和带有Bundler的Rails 2都会适当地设置它们的加载路径,这样它们就不会加载任何不在Gemfile.lock
中的宝石(或任何版本的任何宝石)。我在服务器上遇到“gem依赖问题”并没有任何经验。每当您修改bundle install
时,在开发计算机上运行Gemfile
,并检查Gemfile.lock
到源代码管理中是很重要的,如Bundler homepage所述。< / p>
我花了一些时间深入研究gemsets的使用案例in January。我发现为每个项目使用单独的gemsets的原因是:
bundle exec
的情况下正确运行)。bundle exec
似乎没有帮助。我不认为这些好处在服务器上是非常引人注目的,所以如果你的目标是节省磁盘空间,我不知道你为什么要使用gemsets。
实际上,我在服务器上使用rvm的唯一原因是因为它是从源代码构建ruby的一种便捷方式(我们需要一个原生包管理器中没有的版本)。