gpt4 book ai didi

mysql - 在 Sinatra 中使用环境变量设置 database.yml

转载 作者:行者123 更新时间:2023-11-28 23:58:45 25 4
gpt4 key购买 nike

我在从事的项目中有一个非常奇怪的要求。

我将文件存储在某个位置 /etc/config/config.json,其中包含数据库信息,例如 HostPortUsernamePassword 或大致如下所示:

{ 
"mysql-db": {
"host": "172.17.0.27",
"port": 3306,
"password": "root",
"username": "root"
}
}

我正在构建基于 Sinatra 并使用 sinatra-activerecord 的小型网络应用程序用于使用 MySql 数据库。

我的 database.yml 文件如下所示:

development:
adapter: mysql2
database: toopaste
host: <%= ENV["MYSQL_DB_HOST"] %>
port: <%= ENV["MYSQL_DB_PORT"] %>
username: <%= ENV["MYSQL_DB_USERNAME"] %>
password: <%= ENV["MYSQL_DB_PASSWORD"] %>

我在尝试什么?

我创建了一个像setup.rb这样的可执行文件:

#! /usr/bin/env ruby

require 'json'

FILE_PATH = "/etc/atlantis/config/konfig.json"

data = JSON.parse(File.read(FILE_PATH))

system("export MYSQL_DB_HOST=#{data['mysql-db']['host']}")
system("export MYSQL_DB_PORT=#{data['mysql-db']['port']}")
system("export MYSQL_DB_USERNAME=#{data['mysql-db']['username']}")
system("export MYSQL_DB_PASSWORD=#{data['mysql-db']['password']}")

这不会设置环境变量 MYSQL_DB_HOSTconfig/database.yml 文件使用的其他变量。

知道如何完成这样的工作吗?

我能想到的一种方法是“在读取 config.json 参数后动态生成整个 database.yml 文件。但想知道是否有更好的解决方案。

最佳答案

我感觉 Sinatra 没有将环境变量处理到 database.yml 文件中。 Rails 确实...您可以这样做,但我认为这有点愚蠢。我认为您必须将 YML 文件作为 ERB 模板或其他东西通过。

一些其他选项:

从您的 setup.rb 动态写入整个 database.yml 文件 - 尽管我不会这样做。它像往常一样在那里形成负载。

或者,使用 Sinatra 配置从您的首选文件中设置数据库连接详细信息。 sinatra-activerecord 中的示例读我。

set :database, {adapter: 'mysql', database: ENV['MY_SQL_DB_HOST']}

这对我来说似乎更干净。事实上,我会走得更远,使用 Sinatra 配置来完成整个事情(加载文件,并从那里获取参数)。这样代码变得更明确,并且将来更容易更改。也就是说,这只是我的头脑,所以你可能需要调整:

configure do
FILE_PATH = "/etc/atlantis/config/konfig.json"
data = JSON.parse(File.read(FILE_PATH))
set :DB_PASSWORD = data['mysql-db']['password']
# ETC...
set :database, { ... }
end

希望这对您有所帮助。

关于mysql - 在 Sinatra 中使用环境变量设置 database.yml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30704799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com