我在哪里需要sinatra设置?

时间:2012-11-30 08:19:30

标签: ruby sinatra settings require

我有一个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为父级

的app类中 config.ru

中的


我不知道为什么,但对我而言,我们都没有工作。实际上唯一有效的方法是复制和粘贴每个app类中settings.rb的内容。但这真的很脏,因为如果需要,我必须更改3个文件,例如,不同的<DOCTYPE>

1 个答案:

答案 0 :(得分:1)

<强>重写

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

我只是用子类做到这一点:

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

然后将所有应用程序子类化,如

class App1 < BaseApp
   #your app
end