3

我尝试为我的 sinatra 应用程序设置一个配置文件,并且简单的设置工作。(我的代码中的 puts 打印“Hello!!”)但我阅读了这个文档,它说我可以定义每个环境的设置。我试过了,但它不起作用。我究竟做错了什么?;) 我正在使用这段代码:

#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
4

3 回答 3

1

很久很久以前...

我认为如果您加载 config.yml 文件,但像我看到的那样在主文件中设置您的配置,您还没有解决任何问题。

我在 settings.some_yaml_value 中遇到了关于 noMethodError 的同样问题,原因是路径参数。我是这样解决的:

config_file '/config.yml'

注意 /

于 2014-09-11T11:18:56.183 回答
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
于 2020-07-24T20:08:59.807 回答
-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

请参阅Sinatra 自述文件

于 2012-09-27T14:51:53.420 回答