Ruby 如何在Sinatra模块化应用程序中从模块路径重定向到根应用程序路径?
我有Sinatra base应用程序,如:Ruby 如何在Sinatra模块化应用程序中从模块路径重定向到根应用程序路径?,ruby,module,sinatra,Ruby,Module,Sinatra,我有Sinatra base应用程序,如: class MyApp < Sinatra::Base get '/' do .. end get '/login' do .. end end 我在尝试访问/protected/list时遇到重定向循环,因为它试图从主应用重定向到/protected/login,而不是/login。 我怎样才能强迫它做正确的重定向?我知道我可以使用重定向到('../login'),但这似乎很糟糕。对于Sinatra,您只能将U
class MyApp < Sinatra::Base
get '/' do
..
end
get '/login' do
..
end
end
我在尝试访问/protected/list
时遇到重定向循环,因为它试图从主应用重定向到/protected/login,而不是/login。
我怎样才能强迫它做正确的重定向?我知道我可以使用
重定向到('../login')
,但这似乎很糟糕。对于Sinatra,您只能将URL分配给常量,然后再引用它们
比如:
MAIN_URL='/'
受保护的\u URL='/PROTECTED'
类保护
够丑了
我建议改为使用
在路由方面以及在其他框架糟糕的地方,这是非常明智的
路由部分在这里:来自/config/application.rb中的我的一个应用程序
class MyApp < Sinatra::Base
configure do
APP_ROOT = Pathname.new(File.expand_path('../../', __FILE__))
# By default, Sinatra assumes that the root is the file that
# calls the configure block.
# Since this is not the case for us, we set it manually.
set :root, APP_ROOT.to_path
...
classmyapp
您还可以在config.ru中定义该常量,就像这里的第一个答案一样
map "/" do
run MyApp
end
map "/protected" do
run Protected
end
MAIN_URL = '/'
PROTECTED_URL = '/protected'
class Protected < MyApp
before '/*' do
redirect( MAIN_URL + 'login') unless logged_in
end
get '/list' do
...
end
map MAIN_URL do
run MyApp
end
map PROTECTED_URL do
run Protected
end
class MyApp < Sinatra::Base
configure do
APP_ROOT = Pathname.new(File.expand_path('../../', __FILE__))
# By default, Sinatra assumes that the root is the file that
# calls the configure block.
# Since this is not the case for us, we set it manually.
set :root, APP_ROOT.to_path
...