3

有没有办法只在开发数据库上运行迁移。

我使用 Heroku Connect,将 Postgres 中的某些表与 Salesforce 中的某些表同步。

目前我做了一些 hack,我做了一些迁移,镜像 Postgres 中的表,我正在与 Salesforce 同步。

然后我删除迁移文件(将它们放在单独的文件夹中),然后再推送到 heroku。这需要完成,因为迁移文件会混淆 heroku connect 的工作方式。只是为了上下文。模型看起来像这样。

class MyModel < ApplicationRecord
  self.table_name = 'salesforce.someTable__c' unless Rails.env.development?
end

所以不能真正对my_models数据库中的表进行迁移。

问题是任何时候我必须改变同步的性质,我需要把这些文件带回来,回滚数据库,更新那些原始迁移文件,迁移数据库,然后删除那些迁移文件。

并不是最好的解决方案。

所以回到这个问题。有没有办法只在开发中运行迁移,这样当我在生产中运行迁移时,它会跳过那些仅用于开发的迁移。就像是:

if Rails.env.development?
  ...
else
  ...
end

或者

if Rails.env.production?
  ...
else
  ...
end
4

1 回答 1

1

Heroku 维护了一个名为: 的环境变量RAILS_ENV,Rails 在开发中也维护了相同的变量,因此您可以使用它。

allowed_env = 'development'

if ENV['RAILS_ENV'] == allowed_env
  create_table :users do |t|
  end
end

在 HerokuRAILS_ENV上设置为stagingproduction

于 2017-11-09T01:20:17.600 回答