Rails仅在开发环境下运行迁移。

4
有没有一种方法只在开发数据库上运行迁移?
我使用Heroku Connect将Postgres中的某些表与Salesforce中的某些表同步。
目前,我进行了一些黑客操作,其中我制作了一些迁移文件,这些文件镜像了我正在与Salesforce同步的Postgres表。
然后,在推送到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
1个回答

1
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

我尝试了像 if Rails.env.development? 这样的用户代码,但它没有起作用。在 Heroku 上的 Rails 仍然尝试迁移数据库。你的语法是否与我尝试的不同? - user2517182
无论如何都要尝试并看看。 - user2517182

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接