我们在 Sinatra 中有一个 API,它同时服务于暂存环境和生产环境。如果请求来自登台服务器,API 应该与登台数据库对话。如果请求来自生产服务器,它应该与生产数据库对话。
所有应用程序都部署在 Heroku 上。
我们可以使用env['HTTP_HOST']
来确定请求是来自暂存还是生产,然后设置db_url
.
但是,问题是运行以连接到数据库的 ActiveRecord 初始化代码:
db = URI.parse db_url
ActiveRecord::Base.establish_connection(
:adapter => db.scheme == 'postgres' ? 'postgresql' : db.scheme,
:host => db.host,
:port => db.port,
:username => db.user,
:password => db.password,
:database => db.path[1..-1],
:encoding => 'utf8'
)
在每个请求之前运行此代码是否有意义?那可能会很慢...
另一种解决方案是运行 API 的两个实例。但是我们需要部署两次相同的代码......
有一个更好的方法吗?