【问题标题】:How to define a Rails environment-specific class?如何定义特定于 Rails 环境的类?
【发布时间】:2015-08-10 19:18:40
【问题描述】:

我在 Rails 中有一个使用工厂女孩的类,它不会在生产环境中定义,所以我只需要在环境不是生产环境时加载该类。我尝试使用如下所示的简单 return 语句,但它返回 Invalid return (SyntaxError):

return if Rails.env.production?


附加信息

我正在使用mail_view gem。这是完整的错误跟踪(仅打印了 1 行):

mail_preview.rb: app/mailers/mail_preview.rb:1: Invalid return (SyntaxError)

这是文件的相关部分:

return if Rails.env.production?

class MailPreview < MailView
  include FactoryGirl::Syntax::Methods

  # ...
end

【问题讨论】:

  • 显示完整的错误堆栈。
  • @ArupRakshit 我已经更新了问题。
  • @ChristianDiLorenzo 您可以尝试将文件放在其他位置,然后将 require 语句放在条件中。或者在类中只包含 FactoryGirl(在初始化时)有效。例如` self.class.send(:include, FactoryGirl::Syntax::Methods) 除非 Rails.env.production?`
  • @tgf 我认为你的建议是要走的路。我正在将此更改部署到临时服务器,但它很快就崩溃了。谢天谢地,暂存服务器 :-)。
  • 您的登台服务器是否也在使用生产 Rails 环境?一些团队定义了特定的暂存环境。

标签: ruby-on-rails ruby class production-environment


【解决方案1】:

我认为你可以做到:

unless Rails.env.production?
  class MailPreview < MailView
    include FactoryGirl::Syntax::Methods
    # ...
  end
end

尽管在您的代码中您需要检查该常量是否存在。我宁愿让它保持打开状态,并检查你的控制器或模型,或者如果它是生产的,请使用这个类。

【讨论】:

  • 嗯...我知道这可行,但不希望将整个类包装在 if 块中。
  • 你不能从非方法块返回。你必须这样做。或者就像我说的,有条件地检查你在哪里使用这个类。
  • 这实际上在临时服务器上爆炸了,所以我将尝试将文件放在其他地方并有条件地要求它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 2010-11-17
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
相关资源
最近更新 更多