【问题标题】:Deploying a Rails App to Multiple Servers using Capistrano - Best Practices使用 Capistrano 将 Rails 应用程序部署到多个服务器 - 最佳实践
【发布时间】:2011-02-07 16:36:14
【问题描述】:

我有一个 Rails 应用程序需要部署到 3 个服务器 - machine1.com、machine2.com 和 machine3.com。我希望能够一次将它部署到所有机器上,并单独部署到每台机器上。有人可以帮助我使用骨架 Capistrano 配置文件/配方吗?应该全部在 deploy.rb 中还是应该在 machine1.rb 等中拆分出来?

我认为让 Capistrano 接受命令行参数的方法是正确的,但是当我尝试在命名空间中设置角色时,它就窒息了。我将'hosts = 1,2,3'作为参数传递,并将角色:app/web/db 设置为“machine#{host}.com”,然后拆分命令并进入 each do |host | {}...

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

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

只是不知道它是否应该全部放在 deploy.rb 中并与命名空间分开,还是应该分成多个 *deploy**.rb 文件。

【问题讨论】:

    标签: ruby-on-rails capistrano


    【解决方案1】:

    所有内容都应该放在一个文件中。这是一个例子:

    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%),请确保只提供一个。

    【讨论】:

    • 你将如何部署到 machine1.mydomain.com (如问题所述)
    • @Nikhil Gupte 使用块而不是固定列表可能值得探索这样做。例如stackoverflow.com/a/11594890/495319
    【解决方案2】:

    我不得不使用稍微不同的语法。

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

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 1970-01-01
      • 2016-04-30
      • 1970-01-01
      • 2011-07-26
      • 2010-12-11
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多