ruby-on-rails – 如何在Capistrano中访问服务器特定的选项?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何在Capistrano中访问服务器特定的选项?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图配置Capistrano在两个不同的服务器上执行相同的任务,每个服务器都有不同的凭据.我想做一些类似的事情:
namespace :deploy do
  role :db,"192.168.1.1",:credentials => "db1.yml"
  role :db,:credentials => "db2.yml"

  task :mytask,:roles => :db do
    credentials = YAML.load_file(something)
    ...

那可能吗?为了访问当前服务器配置,应该用什么替代?

解决方法

好的,我终于有一段时间来解决这个问题.希望别人会发现这个答案有用.以下是我最终解决问题的方法
role :db,"db1",{ :credentials => 'db1-credentials'}                     
role :db,"db2",{ :credentials => 'db2-credentials'}                     
role :db,"db3"

namespace :stackoverflow do

  # Don't run this task on host that don't have credentials defined
  task :default,{:role => :db,:except => {:credentials => nil } } do
    servers = find_servers_for_task(current_task)
    servers.each do |server|
      credentials = server.options[:credentials]

      puts credentials # actual task

    end
  end
end

我现在看到,我可能以混乱的方式提出了这个问题 – 那是因为我没有理解,那个任务是同时运行的.

这实际上将为每个服务器执行一次任务(这里放置凭证),这是我正在尝试的.

输出

$cap stackoverflow
  * executing `stackoverflow'
db1-credentials
db2-credentials

向任务添加过滤器是一个好主意,如果服务器没有凭据,它将不会运行.

话虽如此,使得团队中的每个人都保持目前(并且出于安全原因非版本),所有服务器的凭据证明是太麻烦了(从而打败了使用Capistrano的想法).现在,而不是将外部配置保留在用户的磁盘上,我将保留受影响的服务器上的数据(大部分以可运行的脚本的形式,其中隐藏所有凭据).喜欢这个:

task :dump {:role => :db} do
  run "/root/dump_db.sh | gzip > /tmp/dump.sql.gz"
  download "/tmp/dump.sql.gz","somewhere"
end

猜你在找的Ruby相关文章