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

  task :@R_618_11174@ask,: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-on-rails – 如何在Capistrano中访问服务器特定的选项?全部内容,希望文章能够帮你解决ruby-on-rails – 如何在Capistrano中访问服务器特定的选项?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。