使用Capistrano将Rails应用程序部署到多个服务器 – 最佳实践

我有一个rails应用程序,我需要部署到3个服务器 – machine1.com,machine2.com和machine3.com。 我希望能够一次将所有的机器部署到每台机器上,并且单独部署到每台机器上。 有人可以帮我一个骨架Capistranoconfiguration文件/食谱吗? 应该都在deploy.rb或者我应该在machine1.rb中分解出来吗?

我以为我在正确的轨道上让Capistrano接受命令行参数,但是当我尝试在命名空间中设置angular色时,它会窒息。 我将“hosts = 1,2,3”作为参数传入,并在分割命令后将angular色:app / web / db设置为“machine#{host} .com”,并进入每个do | {} …

无论如何,除了创build4个不同的deploy.rb文件并在运行cap之前对其进行重命名之外:每次部署时,我都很难过。 我希望能够做到以下几点:

cap deploy:machine1:latest_version_from_svn cap deploy:all_machines:latest:version_from_svn 

只是不知道它是否应该全部在deploy.rb中与命名空间分离,或者如果它应该被分解成多个* deploy **。rb文件。

它应该都在一个文件中。 这是一个例子:

 set :application, "my-app" set :repository, "git@git.my-git-host.com:my-app.git" set :keep_releases, 5 set :deploy_via, :remote_cache set :git_enable_submodules, true set :scm, :git set :user, 'your-user-here' set :deploy_to, "/var/www/staging.mydomain.com" set :branch, 'staging' set :rails_env, 'staging' role :web, "machine1.mydomain.com", "machine2.mydomain.com", "machine3.mydomain.com" role :app, "machine1.mydomain.com", "machine2.mydomain.com", "machine3.mydomain.com" role :db, "db.mydomain.com" # ... 

你会看到只有一个数据库服务器被指定。 这是迁移将从中运行的机器。 如果你只有一个数据库(对这个问题的答案有99.9%的可能性是YES),那么一定要只提供一个。

我不得不用一个稍微不同的语法。

 role :app, %w{s01.foobaz.com s02.foobaz.com}, user: 'deployer' role :web, %w{s01.foobaz.com s02.foobaz.com}, user: 'deployer'