0

我们在 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 的两个实例。但是我们需要部署两次相同的代码......

有一个更好的方法吗?

4

1 回答 1

4

标准实践和常识表明您应该将生产应用程序与暂存应用程序分开。我不确定您对部署两个不同的应用程序有何反对,但这是确保暂存问题不会影响您的生产应用程序的唯一方法。

于 2012-11-15T23:24:09.457 回答