2016-07-25 11 views
1

私は、私のアプリケーションでサービスクラスを通してアクセスする本番マシン上で動作するサービスを持っています。開発環境用の偽のクラス

ライセンス費用のため、テストと開発環境でこのサービスを偽装したいと思います。

私のレールアプリで環境によって異なるクラス定義を読み込むにはどうすればよいですか?

+0

APIを呼び出すサービスに関連する問題ですか?あるいは、ライセンスは複数のマシンでコードを実行することを禁止していますか? –

+0

サーバー上で実行されているバイナリを照会します。私たちはstaging/my dev環境にそのバイナリをインストールすることはできません。 – Will

答えて

0
あなたの実装で

使用Rails.env

def my_method 
    if Rails.env.production? 
    Model.production_method 
    else 
    Model.development_method 
    end 
end 
+1

フィーチャ検出のために 'production?'やこれに類するメソッドを実行することは今までお勧めしません。代わりに、ロジックを実行するアプリケーションに指示する環境変数を設定する必要があります。代わりに、プロダクションでは 'FEATURE_X = true'、他の環境では' FEATURE_X = false'のようなものがあります。 –

+0

@ChrisPetersまあ、そうすることができます。 –

+0

「Rails.env.production」ではありません。私は尋ねる部分です。私はそれらの環境にクラスの異なるバージョンをどのように組み込むかを知りたい。 – Will

0

私はあなたの説明をキャッチした場合には、システムの機能ではなく、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" 

詳細情報に:

Autoload Paths

Configuring