私は、私のアプリケーションでサービスクラスを通してアクセスする本番マシン上で動作するサービスを持っています。開発環境用の偽のクラス
ライセンス費用のため、テストと開発環境でこのサービスを偽装したいと思います。
私のレールアプリで環境によって異なるクラス定義を読み込むにはどうすればよいですか?
私は、私のアプリケーションでサービスクラスを通してアクセスする本番マシン上で動作するサービスを持っています。開発環境用の偽のクラス
ライセンス費用のため、テストと開発環境でこのサービスを偽装したいと思います。
私のレールアプリで環境によって異なるクラス定義を読み込むにはどうすればよいですか?
使用Rails.env
def my_method
if Rails.env.production?
Model.production_method
else
Model.development_method
end
end
フィーチャ検出のために 'production?'やこれに類するメソッドを実行することは今までお勧めしません。代わりに、ロジックを実行するアプリケーションに指示する環境変数を設定する必要があります。代わりに、プロダクションでは 'FEATURE_X = true'、他の環境では' FEATURE_X = false'のようなものがあります。 –
@ChrisPetersまあ、そうすることができます。 –
「Rails.env.production」ではありません。私は尋ねる部分です。私はそれらの環境にクラスの異なるバージョンをどのように組み込むかを知りたい。 – Will
私はあなたの説明をキャッチした場合には、システムの機能ではなく、APIまたは類似に基づいて何かをするクラスを持っています。
gem 'expensive_service', group: :production
そしてこの宝石は、クラスがあるようです::ExpensiveService、あなたの他の環境では使用できませんあなただけの必要enviromentsにロードされたクラスを持つ宝石を使用している場合がありますことを意味しています。ですから、この宝石を上書きするクラスを作成し、定義した環境でのみロードされるようにする必要があります。
#lib/expensive_service.rb
class ExpensiveService
def foo
end
end
そしてあなたconfig/environments/development.rb
config.autoload_paths << "#{Rails.root}/lib/expensive_service"
詳細情報に:
APIを呼び出すサービスに関連する問題ですか?あるいは、ライセンスは複数のマシンでコードを実行することを禁止していますか? –
サーバー上で実行されているバイナリを照会します。私たちはstaging/my dev環境にそのバイナリをインストールすることはできません。 – Will