【问题标题】:Modular Sinatra App using Sinatra Reloader?使用 Sinatra Reloader 的模块化 Sinatra 应用程序?
【发布时间】:2012-11-13 06:49:23
【问题描述】:

您好,如果我有一个包含以下代码的“主”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 的配置块中,尽管我不想这样做。有什么想法吗?

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    尝试像这样重写

    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
    

    【讨论】:

      猜你喜欢
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多