【问题标题】:Is there any way to get server list with roles from config/deploy/<environment>.rb有没有办法从 config/deploy/<environment>.rb 获取具有角色的服务器列表
【发布时间】:2020-07-28 12:16:59
【问题描述】:

例如

我有一个文件 config/deploy/production.rb

server 'XXX.XXX.XXX.XXX', user: 'root', roles: %w{web app db}
server 'YYY.YYY.YYY.YYY', user: 'root', roles: %w{web app dbslave}
server 'ZZZ.ZZZ.ZZZ.ZZZ', user: 'root', roles: %w{web app dbslave}
...

我需要一个包含服务器及其角色的数组或哈希。

也许有办法重写配置文件来获取它?

【问题讨论】:

  • 也许将数组/哈希存储在任何地方都可以轻松访问的地方,然后在部署文件中对其进行迭代?
  • 谢谢。也许,这是唯一的方法

标签: ruby-on-rails capistrano


【解决方案1】:

创建一个可以在整个应用程序中引用的服务对象:

首先,在您的应用目录中创建一个服务文件夹:/app/services,然后添加一个以该文件命名的服务对象,以便 Rails 自动加载它:

app/services/server_setter.rb
class ServerSetter
  
  def initialize
    if Rails.env.production?
      @server_1 = {address: 'XXX.XXX.XXX.XXX', user: 'root', roles: [web app db]}
    elsif Rails.env.development?
      @server_1 = {address: 'XXX.XXX.XXX.XXX', user: 'root', roles: [web app dbslave]}
    end
  end

  def get_info
    @server_1
  end

end

然后您可以通过调用ServerSetter.new 在您的应用程序或控制台的任何位置检查或引用它。例如,在您的 Rails 控制台中,您可以这样做:

server_info = ServerSetter.new.get_info

【讨论】:

  • 谢谢。我会尝试这样的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 2015-07-18
  • 1970-01-01
  • 2013-01-08
  • 2019-10-15
相关资源
最近更新 更多