我是否认为Sinatra内部没有使用或提及SINATRA_ENV?出于某种原因,我认为有。这就是我现在认为的真实情况:
Sinatra将其环境感建立在RACK_ENV上。如果未定义RACK_ENV,则默认为开发。
如果您使用ActiveRecord,您还需要设置RAILS_ENV,因为Rails模块不关注RACK_ENV,当然也不关注SINATRA_ENV
有人可以证实这种分析吗?
答案 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),它确实将许多这些应用程序问题留给了开发人员。没有很多严格的规则!