有没有一种方法可以仅在开发数据库上运行迁移。
我使用Heroku Connect,将Postgres中的某些表与Salesforce中的某些表同步。
目前,我做了一些黑客工作,在这些工作中进行了一些迁移,这些迁移反映了与Salesforce同步的Postgres中的表。
然后,在推送到heroku之前,删除迁移文件(将它们放在单独的文件夹中)。 之所以需要这样做,是因为迁移文件会干扰heroku连接的工作方式。 仅出于上下文。 这些模型看起来像这样。
class MyModel < ApplicationRecord
self.table_name = 'salesforce.someTable__c' unless Rails.env.development?
end
因此,实际上无法对db中的my_models
表进行迁移。
问题是任何时候我必须更改同步的性质时,都需要将这些文件放回原处,回滚数据库,更新那些原始的迁移文件,迁移数据库,然后删除那些迁移文件。
并不是真正的最佳解决方案。
回到问题所在。 有没有一种方法可以只在开发中运行迁移,这样当我在生产中运行迁移时,它将跳过那些仅用于开发的迁移。 就像是:
if Rails.env.development?
...
else
...
end
要么
if Rails.env.production?
...
else
...
end
Heroku维护了一个名为RAILS_ENV
的环境变量,并且Rails在开发中也维护了相同的变量,因此您可以使用它。
allowed_env = 'development'
if ENV['RAILS_ENV'] == allowed_env
create_table :users do |t|
end
end
在Heroku上, RAILS_ENV
设置为staging
或production
。