【问题标题】:Where do I require sinatra settings?我在哪里需要 sinatra 设置?
【发布时间】:2012-11-18 10:41:53
【问题描述】:

我有一个 sinatra 项目,其中包含 3 个 sinatra 应用程序(模块化风格)。 我在settings.rb 下有我的设置,我想将这些设置用于所有 3 个 sinatra 应用程序。

我正在运行ruby 1.9.3p327


我的settings.rb:

#Environments: :production, :development
set :environment, ENV['RACK_ENV'] ||= "development".to_sym

disable :run      #disable internal webserver

configure :development do
  set :haml           ,  :format => :html5, :ugly => false
  enable :static
  enable :show_exceptions
  enable :raise_errors
end

configure :production do
  set :haml           ,  :format => :html5, :ugly => true
  disable :static
  disable :show_exceptions
  disable :raise_errors
end
#######################

我的config.ru:

require 'sinatra'       #Web Framework
require 'haml'          #Haml Rendering for the views
require './db_setup.rb' #DB Setup
require './models.rb'   #DB Models
require './app1.rb'     #app1
require './app2.rb'     #app2
require './app3.rb'     #app3

map '/' do
  run App1
end

map '/app2' do
  run App2
end

map '/app3' do
  run App3
end

我在哪里放置require './settings.rb'


适合的地方:

在每个应用文件的顶部,例如app1.rb

在每个以Sinatra::Base 为父级的应用程序类中

config.ru


我不知道为什么,但对我来说,它们都不起作用。唯一有效的方法是在每个应用程序类中复制和粘贴settings.rb 的内容。但这真的很脏,因为如果需要,我必须更改 3 个文件,例如,不同的 <DOCTYPE>

【问题讨论】:

  • 你在config.ru中试的时候,是放在appX需要之前还是之后?
  • 它并不适用于所有人,只适用于第一个......我还尝试在每个 appX.rb require 之前要求 settings.rb 但它只使用设置第一个应用程序...
  • 好吧,我犯了一个错误,它对他们都不起作用......

标签: ruby sinatra settings require


【解决方案1】:

重写

啊,所以问题实际上不在于require。发生的事情是run 正在使用默认设置创建应用程序的新实例。这些应用程序不会“继承”configure 调用,这些调用只是在非模块化应用程序上设置的;即您必须从应用程序的上下文中实际调用configure

我只是用子类来做这个:

class BaseApp < Sinatra::Base
  set :environment, ENV['RACK_ENV'] ||= "development".to_sym
  #etc
end

然后让所有的应用都继承它的子类,比如

class App1 < BaseApp
   #your app
end

【讨论】:

  • 好吧,它对他们都不适用比只对一个人有效更有意义。接下来要尝试的是在 settings.rb 的末尾添加 puts 语句,并确认它在您需要时实际执行
  • 只有将settings.rb的内容直接放在类声明的顶部才有效...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2015-10-19
  • 2018-04-15
  • 2011-03-09
  • 2016-08-04
  • 2011-02-15
相关资源
最近更新 更多