我有想法将我的应用配置为使用不同的gemset进行分段和制作。我的想法是通过将环境分成不同的宝石集,当我需要更新gems / ruby / rails时,我会有更多的自由。我能够做出这样的改变,并在不干扰生产app / gemset的情况下测试整个过程。
要实现这一点,我将在服务器上有两个文件,每个环境的共享目录中有一个名为rvmrc。其中包含用于生产的rvm use ree-1.8.7-2012.02@appname-production --create
和用于暂存的rvm use ree-1.8.7-2012.02@appname-staging --create
。
我会在部署脚本中添加一项任务,将相应的shared/rvmrc
文件链接到应用.rvmrc
:
namespace :deploy do
task :rvmrc do
run "rm #{latest_release}/.rvmrc; ln -s #{shared_path}/rvmrc #{latest_release}/.rvmrc"
end
end
before "bundle:install", "deploy:rvmrc"
这实际上是个好主意,还是我过于复杂?
答案 0 :(得分:3)
理想情况下,您希望在开发过程中使用生产中使用的所有宝石。我只会拆分特定环境的宝石,而另一环境则不需要宝石。在我的大多数应用程序中,我通常只有开发所需的特定宝石。如果您需要拆分宝石,可以简单地将它们分组,例如:
group :development do
gem 'development gem'
end
group :production do
gem 'production gem'
end
答案 1 :(得分:0)
house9是正确的
我很确定'bundler / capistrano'会安装所有的 在安装目录下安装共享/捆绑的gem 如果运行staging和目录将需要不同 在同一台机器上生产,所以我认为你可以获得宝石隔离 默认?
您可以通过运行cd /path/to/staging; bundle list
和cd /path/to/production; bundle list
在服务器上查看此操作。如果在每个环境中安装了不同的gem,则会从每个命令中获得不同的列表。
正如house9所提到的那样,您只需确保从暂存或生产运行时所做的一切都使用bundle exec
:rake任务,启动服务器等等。
由于在使用bundler / capistrano时默认存在gem隔离,因此没有理由将您的环境放在单独的gemsets中。