我正在考虑为生产数据库支付50美元/月,这样我就可以将PostGIS与我的rails 4 app一起使用。我的问题是我想继续开发一个'staging'环境,但还不能证明支付两个生产数据库是合理的。暂存显然只是生产的一个副本,因此只需将两个应用程序指向同一个数据库URL(post)就可能会引起一些重大问题。
有没有办法对数据库进行分区,或者你推荐的其他策略?
来自heroku支持的最初答案是否定的,但我希望有一个有争议的解决方法。
谢谢!
答案 0 :(得分:2)
首先,我强烈建议只需支付额外的50美元/月。为此,你会得到各种很酷的东西,比如forking和pipelines,以及这种情况,这是一种hacky。老实说,当您清除登台数据库时,我不知道这是否最终会擦除您的生产数据。请在尝试之前进行备份。
我认为这个答案是对技术挑战的回答,而不是商业决策。不用多说,
首先,我删除了现有的dev数据库,并将生产数据库添加到我的生产应用程序中。
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})'"
接下来,创建暂存应用。有关详细信息,请参阅Managing Multiple Environments for an App。
heroku create --remote staging test-shared-app-staging
heroku config:set RACK_ENV=staging RAILS_ENV=staging --remote staging
然后,从现有应用复制环境数据。 将?schema_search_path=staging
添加到网址末尾。
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
现在,在暂存时运行迁移
heroku run --remote staging bundle exec rake db:migrate
试一试。
我的“应用”正在http://test-shared-app.herokuapp.com/posts和http://test-shared-app-staging.herokuapp.com/posts上投放。您可以在https://github.com/benmanns/heroku-shared-app找到来源。
答案 1 :(得分:1)
如果我是你,我会使用生产数据库,直到合适的时刻(开始赚钱或获得更多用户等)。我会复制生产数据库中的所有表,并通过添加类似“stag_ {original_table_name}”的内容为新表提供新名称。因此,您将拥有两组不同的相同表。在模型中,让它们使用新表暂存环境:
class Foo < ActiveRecord::Base
self.table_name = "staging_#{self.class.name}" if Rails.env.staging?
我很便宜......在真正的Rails大师眼中,这可能是一个丑陋的解决方案。
答案 2 :(得分:1)
Heroku Schemas是另一种方法;它是一个Heroku插件,基本上可以让你运行一个命令来应用Benjamin Manns的多个模式的解决方案。