什么是SINATRA_ENV?

时间:2016-09-05 14:28:55

标签: sinatra

我是否认为Sinatra内部没有使用或提及SINATRA_ENV?出于某种原因,我认为有。这就是我现在认为的真实情况:

Sinatra将其环境感建立在RACK_ENV上。如果未定义RACK_ENV,则默认为开发。

如果您使用ActiveRecord,您还需要设置RAILS_ENV,因为Rails模块不关注RACK_ENV,当然也不关注SINATRA_ENV

有人可以证实这种分析吗?

1 个答案:

答案 0 :(得分:0)

你大多是正确的。一些开发人员将在他们的应用程序中构建SINATRA_ENV(并将RACK_ENV设置为它),但它没有内置到库中。 Sinatra 2.0引入APP_ENV,优先于RACK_ENV

如果未设置RACK_ENV,ActiveRecord似乎会检查RAILS_ENV,因此您不需要手动设置RAILS_ENV。这可能是Sinatra 2.0的一个问题,所以要记住这一点。一个简单的解决方法是将RACK_ENV设置为APP_ENV以便与其他宝石向后兼容,反之亦然。

在Sinatra应用程序(经典和模块化)中,您应该使用environment(或帮助器和路由中的self.environment)和便捷方法,例如development?production?等而不是明确地检查环境变量。一旦Sinatra加载,我已经开始在我的应用程序之外使用Sinatra::Base.environment(和上述便利方法)。例如:

# Gemfile

gem 'sinatra', require: 'sinatra/base' # in default group

group :development do
  # ..
end

group :production do
  # ..
end

# config.ru

require 'bundler/setup'

Bundler.require :default # this loads Sinatra, which inspects e.g. RACK_ENV
Bundler.require Sinatra::Base.environment

值得注意的是,Sinatra是一个很小的小型库(我上次检查时,大约2K LOC),它确实将许多这些应用程序问题留给了开发人员。没有很多严格的规则!