开发环境的假类

时间:2016-07-25 14:29:21

标签: ruby-on-rails

我有一个在我通过我的应用程序中的服务类访问的生产机器上运行的服务。

由于许可成本,我想为我的测试和开发环境假冒该服务。

如何在rails应用程序中根据环境加载不同的类定义?

2 个答案:

答案 0 :(得分:0)

在您的实施中使用Rails.env

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

答案 1 :(得分:0)

如果我发现你的解释,你就会有一个基于系统功能而不是API或类似功能的课程。这意味着您可能正在使用具有仅在所需环境中加载的类的gem:

mean(A*B)

这个gem似乎有一个类:ExpensiveService,在你的其他环境中不可用。所以你需要做的是创建一个覆盖这个gem的类,并且只在你定义它的环境中加载。

library(data.table)
setDT(DF)[,  D := NA^(.N==1)*mean(A*B) , .(grp = cumsum(C==2))]
DF
#    A B  C        D
# 1: 1 2  0  6.00000
# 2: 2 5  0  6.00000
# 3: 4 5  2 34.16667
# 4: 4 7  0 34.16667
# 5: 7 8  0 34.16667
# 6: 9 7 -2 34.16667
# 7: 2 5  0 34.16667
# 8: 4 7  0 34.16667
# 9: 5 1  2 31.66667
#10: 4 7  0 31.66667
#11: 7 8  0 31.66667
#12: 9 7 -2 31.66667
#13: 2 5  0 31.66667
#14: 4 7  0 31.66667
#15: 5 1  2       NA

然后在gem 'expensive_service', group: :production

#lib/expensive_service.rb
class ExpensiveService
  def foo
  end
end

更多信息:

Autoload Paths

Configuring