嗨,如果我有一个包含以下代码的“主”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 在开发模式下重新加载?我必须在我的每个 Controller 文件中放置配置 block 并要求 sinatra/reloader 吗?我想让我的 Controller 继承我的主类的设置。 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 的配置 block 中,尽管我不想这样做。有什么想法吗?

请您参考如下方法:

尝试这样重写

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 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!