2016-07-25 145 views
1

我有一個服務,運行在生產機器上,我可以通過我的應用程序中的服務類訪問。虛擬類開發環境

由於許可成本,我想爲我的測試和開發環境僞造該服務。

如何根據環境在我的rails應用程序中加載不同的類定義?

+0

是與服務調用API的問題?或者許可證是否禁止您在多臺計算機上運行代碼? –

+0

它查詢在服務器上運行的二進制文件。我們不允許在登臺/我的開發環境中安裝該二進制文件。 – Will

回答

0

使用Rails.env在您的實現

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

我不建議運行「生產」或類似方法進行特徵檢測。您應該設置環境變量來指示應用程序運行哪個邏輯。相反,您可以在生產環境中使用「FEATURE_X = true」,在其他環境中使用「FEATURE_X = false」。 –

+0

@ChrisPeters是的,你可以做到這一點。 –

+0

這不是「Rails.env.production?」我正在問的一部分。我想知道如何爲這些環境包含一個不同版本的類。 – Will

0

如果我抓住你的解釋,你必須的類,它基於一個系統功能,而不是一個API或類似的東西。這意味着你可能會使用具有一個被加載只在需要enviroments類寶石:

gem 'expensive_service', group: :production 

而這寶石似乎有一類:ExpensiveService,是不是在你的其他環境中使用。所以你需要做的是創建一個覆蓋這個gem的類,並且只在你定義它的環境中加載。

#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