放置文件标志的逻辑位置在哪里?

时间:2017-07-13 17:59:12

标签: ruby-on-rails ruby

在Ruby on Rails应用程序中,最合理的位置是放置“文件标志”。

我正在尝试外部化配置,并允许文件的存在是决定是否在webapp上显示某些内容的决定性因素。

现在,我有一个文件:

lib/
  deployment_enabled

模型 deployment.rb

class Deployment...
  ...
  def deployment_enabled?
    Dir["#{Rails.root}/lib/deployment_enabled"].any?
  end
end

现在这当然有效,但我不确定这是否遵循MVC范例,因为lib目录应该包含脚本。我可以把它放在config中,但是再次 - 不确定它是否属于那里,因为rails使用它来进行特定于rails的配置,不一定是webapp。

我当然可以将它放在我们的数据库中,但这需要创建一个新表,这似乎是不必要的。

放置此标志文件的最合理位置在哪里? Rails是否有一个在生成期间创建的目录来放置这些文件?

2 个答案:

答案 0 :(得分:1)

我建议使用Rails tmp目录来实现此目的。然后:

File.exist?("#{Rails.root}/tmp/deployment_enabled")

Phusion Passenger也使用这种机制。 great implementation

答案 1 :(得分:0)

我建议您遵循Twelve-Factor App指南,并将代码与配置分开。在这种情况下,您实际上是在谈论一个简单的布尔值,文件的存在只是您用来定义值的机制。这应该通过环境变量来完成。

类似的东西:

DEPLOYMENT_ENABLED=1 RAILS_ENV=production rails server

然后,您将在Rails中使用初始化程序来检测值:

# config/initializers/deployment.rb
foo if ENV['DEPLOYMENT_ENABLED']

仍可在运行时修改该值,例如ENV['DEPLOYMENT_ENABLED'] = 0