1

3 つのシナトラ アプリ (モジュラー スタイル) で構成されるシナトラ プロジェクトがあります。3 つのシナトラ アプリすべてにsettings.rbそれらを使用したいです。

私は走ってい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>

4

1 に答える 1

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
于 2012-11-30T08:58:45.697 に答える