Rails仅针对开发环境运行迁移

问题描述 投票:1回答:1

有没有一种方法可以仅在开发数据库上运行迁移。

我使用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
ruby-on-rails postgresql heroku rails-migrations heroku-connect
1个回答
0
投票

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

allowed_env = 'development'

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

在Heroku上, RAILS_ENV设置为stagingproduction

© www.soinside.com 2019 - 2024. All rights reserved.