首页 > 解决方案 > 有没有办法从 config/deploy/ 获取具有角色的服务器列表.rb

问题描述

例如

我有一个文件 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-railscapistrano

解决方案


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

首先,在你的 app 目录中创建一个 services 文件夹: /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

推荐阅读