【问题标题】:Capistrano; Check if server is primary卡皮斯特拉诺;检查服务器是否为主
【发布时间】:2014-07-29 05:33:14
【问题描述】:

所以,我在主服务器部署后使用 Drush (Drupal) 运行一些命令(缓存清除、数据库更新等)。

我的 deploy.rb 中有一个这样的块;

after :restart, :clear_cache do
  on roles(:web), in: :groups, limit: 3, wait: 10 do
    symlink_configuration.each do |config|
      shared = File.join(shared_path, config[0])
      release = File.join(release_path, config[1])
      execute "ln -nfs #{shared} #{release}"
    end

    # Drush tasks.
    execute "drush -r #{File.join(release_path, 'app')} vset --exact --yes maintenance_mode 1; true"
    execute "drush -r #{File.join(release_path, 'app')} cc all; true"
    execute "drush -r #{File.join(release_path, 'app')} -y updb; true"
    execute "drush -r #{File.join(release_path, 'app')} vset --exact --yes maintenance_mode 0; true"
  end
end

问题是我只想在主服务器上执行这些任务。我在 production.rb 中标记了 primary: true,但我看不出如何将块包装在 if(is(primary)) 或类似的东西中。

在此不胜感激。

谢谢。

【问题讨论】:

    标签: capistrano3 drush


    【解决方案1】:

    试试

    on primary roles(:web), in: :groups, limit: 3, wait: 10 do
    

    您可以查看 capistrano db 迁移任务中使用的主要示例 https://github.com/capistrano/rails/blob/master/lib/capistrano/tasks/migrations.rake

    【讨论】:

    • 关闭,它似乎是on primary, in .... - 似乎不能将它与角色子句一起使用。
    • 我觉得应该是:on primary(:web), ...
    • 在主节点上是正确的,但是它需要一个简单的角色(:web)将返回服务器信息。但是,您可以通过 fetch 来做类似的事情。 on primary fetch(:web), in: :groups, limit: 3, wait: 10 do 然后使用 set 将变量设置为您想要的任何内容 set :web, :primary_web
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2017-10-23
    • 2019-11-11
    相关资源
    最近更新 更多