0

開発データベース上で移行を実行する方法はありますか?Railsは開発環境用にのみ移行を実行します

私はHeroku Connectを使用して、Postgresの特定のテーブルとSalesforceの特定のテーブルを同期させます。

現在、私はSalesforceと同期しているPostgresのテーブルをミラー化するいくつかの移行を行っています。

その後、私はherokuにプッシュする前に、移行ファイルを削除します(別のフォルダに配置します)。これは、移行ファイルがheroku接続の仕組みを混乱させるために実行する必要があります。ちょうど文脈のために。モデルはこのように見えます。

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

my_modelsテーブルの移行は実際にはできません。

問題は、同期の性質を変更する必要があるときはいつでも、それらのファイルを戻し、dbをロールバックし、オリジナルの移行ファイルを更新し、データベースを移行してから移行ファイルを削除する必要があります。

実際には最適なソリューションではありません。

だから質問に戻る。開発時にマイグレーションを実行する方法があります。つまり、マイグレーションを本番環境で実行すると、開発用のマイグレーションはスキップされます。何かのように:

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

または

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

答えて

0

Herokuのは、という環境変数を維持:RAILS_ENVを、同じ変数があまりにも開発中のRailsによって維持されているので、あなたはそれのために行くことができます。 HerokuのRAILS_ENV

allowed_env = 'development' 

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

staging又はproductionに設定されているいずれか。

+0

だから私はそのユーザーのようなものを試してみましたが、Rails.env.development?なら動作しませんでした。 herokuのRailsはまだdbを移行しようとしました。あなたの構文は私が試したものとは違ったことをしていますか? – user2517182

+0

いずれかの方法でそれを試して見てください。 – user2517182

+0

動作しませんでした。まだherokuのdbによって変更されています。 – user2517182

関連する問題