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 回答