为每个rails守护程序分隔数据库凭据

时间:2018-01-17 00:34:04

标签: ruby-on-rails ruby-on-rails-3 configuration daemon privilege

我在自己的守护进程中运行多个工作进程(使用rails-daemon gem),每个进程都应该有单独的数据库角色/权限(例如,一个应该只能读取表X,另一个只能写到X和Y),但似乎Rails设置为从一个config/database.yml读取数据库凭据。如何在rails中设置配置多个db用户,以便每个worker使用自己的凭据?

1 个答案:

答案 0 :(得分:0)

您可以将代码ERB注入database.yml文件,以便根据工作人员名称在数据库用户之间切换,从而根据当前工作人员更改数据库用户。

config / database.yml文件可以包含ERB标记<%=%>。标签中的任何内容都将被评估为Ruby代码。您可以使用它从环境变量中提取数据或执行计算以生成所需的连接信息。

<强>参考:
http://edgeguides.rubyonrails.org/configuring.html

示例:

    <%
        def get_worker_credential
            current_worker = "..." # You need to get the current worker name
       case current_worker
            when "worker-A"
                return  { username: "userA", password: "kjahskdjashd" }
            when "worker-B"
                return  { username: "userB", password: "gtrgrttrtn" }
            else
                return  { username: "guest", password: "fsdfdsdfsd" }
            end
        end
    %>

    test:
      adapter: mysql
      database: db
      username: <%= get_worker_credential.username %>
      password: <%= get_worker_credential.password %>
      host: host_site