我尝试为我的sinatra应用程序设置配置文件,并且简单的设置工作。 (在我的代码中输入打印“Hello !!”)但是我读了this document,它说我可以定义每个环境的设置。我尝试过但它不起作用。我究竟做错了什么? ;) 我正在使用此代码:
#settings.yml
#environments: :production, :development
environment: :development
bla: Hello!!
development:
db_adapter: "sqlite3"
db_location: "db/development"
db_logfile: $stdout
db_loglevel: :debug
haml: "format => :html5, :ugly => true"
production:
db_adapter: "sqlite3"
db_location: "db/production"
db_logfile: "log/production_db.log"
db_loglevel: :error
和
#main.rb
#!/usr/bin/ruby
require 'rubygems'
require 'sinatra' #Webframework
require 'sinatra/config_file' #Config
set :environment, :development
config_file("settings.yml")
puts settings.bla
DataMapper::Logger.new(settings.db_logfile, settings.db_loglevel)
DataMapper.setup(:default, "#{settings.db_adapter}://#{Dir.pwd}/#{settings.db_location}")
...
它为settings.db_logfile引发了一个noMethodError ... 抱歉我的英语不好;)
EDIT1: 我知道了 ;) 我必须把它写进我的main.rb:
set :environment, :development
configure :development do
set :db_adapter , "sqlite3"
set :db_location , "db/development"
set :db_logfile , $stdout
set :db_loglevel , :debug
set :haml , :format => :html5
end
答案 0 :(得分:0)
我认为如果您加载config.yml文件但在我的主文件中设置您的配置,我就无法解决任何问题。
我在settings.some_yaml_value中遇到了与noMethodError相同的问题,原因是路径参数。我这样解决了:
config_file '/config.yml'
请注意/
答案 1 :(得分:0)
我遇到的问题是正在加载文件,但是没有拾取环境,因此我必须引用settings.development.foo
事实证明,如果您的.yml
文件包含与您的环境之一不匹配的任何顶级密钥,那么整个环境加载将被取消。
不良示例:
defaults: &defaults
foo: asd
bar: xyz
development:
<<: *defaults
test:
<<: *defaults
production:
<<: *defaults
好的示例:
development: &defaults
foo: asd
bar: xyz
test:
<<: *defaults
production:
<<: *defaults
答案 2 :(得分:-2)
您想要像这样配置您的环境:
configure :production do
set :db_adapter, "sqlite3"
set :db_location, "db/production"
set :db_logfile, "log/production_db.log"
set :db_loglevel, :error
end
configure :development do
set :db_adapter, "sqlite3"
set :db_location, "db/development"
set :db_logfile, $stdout
set :db_loglevel, :debug
set :haml, {:format => :html5, :ugly => true}
end
configure :test do
...
end