sinatra应用程序是否可以使用2个数据库?

时间:2012-11-15 23:18:50

标签: ruby database api heroku sinatra

我们在Sinatra中有一个API,它既可用于登台环境,也可用于生产环境。如果请求来自登台服务器,则API应与登台数据库通信。如果请求来自生产服务器,它应该与生产数据库通信。

所有应用都部署在Heroku上。

我们可以使用env['HTTP_HOST']来确定请求是来自暂存还是生产,然后设置db_url

但是,问题是运行连接到db的ActiveRecord init代码:

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

有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

标准做法和常识说,您应该将生产应用程序与登台应用程序分开。我不确定你有什么反对部署两个不同的应用程序,但这是确保升级问题不会使你的生产应用程序绊倒的唯一方法。