每个 rails 守护程序的单独数据库凭据

Separate database credentials for each rails daemon

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

您可以将代码 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