2

こんにちは、次のコードを含む「メイン」sinatra ファイルがあれば、

require 'sinatra'
require "sinatra/reloader"

class MyApp < Sinatra::Base
  configure do
    require "./rest/auth.rb"
    register Sinatra::Reloader
    also_reload '/rest/auth'
  end

  get '/' do
    erb :home
  end
end

また、認証ロジックを /rest/auth.rb 内に配置したかったのですが、開発モードで /rest/auth.rb をリロードするにはどうすればよいですか? 構成ブロックを配置し、すべてのコントローラー ファイルに sinatra/reloader を要求する必要がありますか? コントローラーがメイン クラスの設定を継承するようにしたいと考えています。auth.rb 内のコードは次のとおりです。

class MyApp < Sinatra::Base
  set(:auth) do |*roles|  # <- notice the splat here
    condition do
      unless logged_in?
        session[:success_url] = request.path_info
        redirect '/'
      end
    end
  end

  def logged_in?
    current_user
  end

  def current_user
    if session[:user_id]
      u = User.find(:id=>"#{session[:user_id]}")
    else
      false
    end
  end
end

変更を有効にするにはサーバーを再起動する必要がありますが、そのリロード コードを auth.rb の構成ブロックにスローすることはできますが、そうしたくありません。何か案は?

4

1 に答える 1

9

このように書き直してみてください

require 'sinatra/base'
require "sinatra/reloader"

class MyApp < Sinatra::Base

  configure :development do
    register Sinatra::Reloader
    also_reload './rest/auth'
  end

  require "./rest/auth.rb"


  get '/' do
    erb :home
  end

end
于 2012-11-13T14:36:25.163 に答える