将不同的宝石集用于登台和生产环境是一个好主意吗?

时间:2012-12-22 16:57:30

标签: ruby-on-rails rvm capistrano

我有想法将我的应用配置为使用不同的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"

这实际上是个好主意,还是我过于复杂?

2 个答案:

答案 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 listcd /path/to/production; bundle list在服务器上查看此操作。如果在每个环境中安装了不同的gem,则会从每个命令中获得不同的列表。

正如house9所提到的那样,您只需确保从暂存或生产运行时所做的一切都使用bundle exec:rake任务,启动服务器等等。

由于在使用bundler / capistrano时默认存在gem隔离,因此没有理由将您的环境放在单独的gemsets中。