2016-07-25 146 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