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

Ruby sinatra应用程序是否可以使用2个数据库?,ruby,database,api,heroku,sinatra,Ruby,Database,Api,Heroku,Sinatra,我们在Sinatra中有一个API,它同时服务于暂存环境和生产环境。如果请求来自临时服务器,则API应与临时数据库通信。如果请求来自生产服务器,它应该与生产数据库通信 所有应用都部署在Heroku上 我们可以使用env['HTTP\u HOST']来确定请求是来自暂存还是生产,然后设置db\u url 但是,问题在于运行以连接到数据库的ActiveRecord init代码: db = URI.parse db_url ActiveRecord::Base.establish_connectio

我们在Sinatra中有一个API,它同时服务于暂存环境和生产环境。如果请求来自临时服务器,则API应与临时数据库通信。如果请求来自生产服务器,它应该与生产数据库通信

所有应用都部署在Heroku上

我们可以使用
env['HTTP\u HOST']
来确定请求是来自暂存还是生产,然后设置
db\u url

但是,问题在于运行以连接到数据库的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。不要将登台系统和生产系统结合起来。有关理念和最佳实践的信息,请参阅。这不一定很难。@willglynn-很棒的资源。+1。不要将登台系统和生产系统结合起来。有关理念和最佳实践的信息,请参阅。这不一定很难。@willglynn-很棒的资源。