2

我正在考虑为生产数据库支付 50 美元/月,这样我就可以将 PostGIS 与我的 rails 4 应用程序一起使用。我的问题是我想继续使用“暂存”环境进行开发,但还不能证明为两个生产数据库付费是合理的。Staging 显然只是生产的克隆,因此仅将两个应用程序指向相同的 DB url ( post ) 可能会导致一些重大问题。

有没有办法对数据库进行分区,或者您推荐的其他策略?

heroku 支持的初步回答是否定的,但我希望有一个好斗的解决方法。

谢谢!

4

3 回答 3

2

首先,我强烈建议只需支付额外的 50 美元/月。为此,您会得到各种很酷的东西,例如分叉管道,以及这有点 hacky 的事实。老实说,当您清除暂存数据库时,我真的不知道这是否最终会擦除您的生产数据。请在尝试此操作之前进行备份。

我会将这个答案视为对技术挑战的回答,而不是对商业决策的回答。无需再费周折,

使用 Heroku Postgres 模式在同一个数据库上设置多个环境

首先,我删除了现有的开发数据库并将一个生产数据库添加到我的生产应用程序中。

heroku addons:add heroku-postgresql:crane

> Adding heroku-postgresql:crane on test-shared-app... done, v# ($50/mo)
> Attached as HEROKU_POSTGRESQL_RED_URL

这在颜色下附加了一个数据库,因此请为您的应用RED替换为适当的颜色。HEROKU_POSTGRESQL_RED_URL

这会将数据库附加到生产应用程序,但我们需要连接到同一个应用程序以进行暂存。首先,创建暂存模式

heroku run "bundle exec rails runner 'ActiveRecord::Base.connection.execute(%q{CREATE SCHEMA staging})'"

接下来,创建登台应用程序。有关更多信息,请参阅管理应用程序的多个环境

heroku create --remote staging test-shared-app-staging
heroku config:set RACK_ENV=staging RAILS_ENV=staging --remote staging

然后,从现有应用程序复制环境数据。添加?schema_search_path=staging到 URL 的末尾。

heroku config --remote heroku --shell
# make note of your database URLs
heroku config:set --remote staging \
  DATABASE_URL=postgres://...?schema_search_path=staging \
  HEROKU_POSTGRESQL_RED_URL=postgres://...?schema_search_path=staging

并推到登台

git push staging master

现在,在 staging 上运行迁移

heroku run --remote staging bundle exec rake db:migrate

并尝试一下。

我的“应用程序”在http://test-shared-app.herokuapp.com/postshttp://test-shared-app-staging.herokuapp.com/posts运行。您可以在https://github.com/benmanns/heroku-shared-app查看源代码。

于 2013-08-20T21:44:37.930 回答
1

如果我是你,我会在适当的时候使用生产数据库(开始赚钱或获得更多用户等)。我会复制生产数据库中的所有表,并通过在前面加上“stag_{original_table_name}”之类的内容来为新表命名。因此,您将拥有两组不同的相同表。在您的模型中,让它们使用新表登台环境:

class Foo < ActiveRecord::Base
  self.table_name = "staging_#{self.class.name}" if Rails.env.staging?

我很便宜……在真正的 Rails 大师眼中,这可能是一个丑陋的解决方案。

于 2013-08-20T19:39:49.710 回答
1

Heroku Schemas是另一种方法。它是一个 Heroku 插件,基本上可以让您运行一个命令来应用 Benjamin Manns 的多个模式的解决方案。

于 2013-11-30T01:11:39.267 回答