在Sinatra中(使用Sinatra :: Configfile)使用settings.foo
这样的设置非常简单,但是如果你需要将你的设置放在一个层次结构中,那么如何在一个层次结构中进行设置并不是很明显。简单直接的方式。
这很痛苦:
get '/test' do
case settings.environment
when :production
settings.production['foo']
else
settings.development['foo']
end
end
更接近这一点会好得多,但这不起作用:
get '/test' do
settings[settings.environment]['foo']
end
答案 0 :(得分:3)
您可以使用send
使用字符串调用对象上的方法。
get '/test' do
settings.send(settings.environment.to_s)['foo']
end
答案 1 :(得分:1)
您在寻找configure
吗?
set :foo, "default value\n" # or explicitly set for each environment
# with different configure blocks
configure :production do
set :foo, "production\n"
end
get '/test' do
settings.foo
end
答案 2 :(得分:1)
我相信这就是你想要的。
在Sinatra应用程序的顶部添加以下内容。
require 'sinatra/config_file'
config_file './config/config.yml' # Point to wherever you want to store your config.yml
# Within your config.yml specify per environment settings; very similar to Rails
development:
database: sqlite://../bigtunadev.db
cipher: lamecipher4dev
oracle:
user: oracle_user
password: oracle_password
db2:
user: db2_user
password: db2_password
mysql:
user: mysql_user
password: mysql_password
production:
database: sqlite://../bigtunaprod.db
cipher: wA7Th1515@n@w3s0m3c1p43r
默认情况下,仅支持test, production, and development
个环境。
如果您想添加其他环境,则必须在配置中覆盖它,如下所示。
set :environments, %w{development test production staging}
这将直接在当前环境的设置上公开属性。
在开发部分注意我添加了额外的嵌套。
多级嵌套必须作为哈希访问,因此它看起来如下所示。
settings.oracle["user"]