Jruby sinatra应用程序路由问题在后路由处理程序(莺生成的战争文件子uri部署)



我实现了一个小的jruby sinatra应用程序,如果我直接在 WEBrick 本地所有路由都完美运行。但是当我部署时 战争文件(我使用莺莺)到服务器实例(如 "example.com/myapp"或"本地主机:8080/myapp")我有路由 发布请求中的问题。

例如:

get '/login' do
slim :login
end

post  '/login' do
session.clear
login_correct? = check_password (params[:user], params[:pass])
if(login_correct?)
session[:user] = params[:user]
redirect to('/')
else
redirect to('/login')
end
end

get '/redirect' do
redirect to('/login')
end

在这里,第 3 个路由处理程序(获取"/重定向"执行 ..) 重定向到 本地主机:8080/myApp/使用状态代码 303 正确登录,但是第二路由处理程序重定向 到本地主机:8080/使用状态代码 404 登录。

我应该怎么做才能在邮政路由处理程序中重定向工作 部署应用时正确吗?

多谢!

解决方案更新:一次又一次地检查代码后,我意识到问题是我在slim:login中使用form action = '/login'而不是form action= "#{url('/login')}"。所以它甚至没有被邮政路由处理程序处理,因为帖子请求被发送到 localhost:8080/login,但我认为是路由处理程序将其重定向到那里。

尝试使用 Sinatra 设置set :prefixed_redirects, true

(它应该使用带有重定向的rack.env['SCRIPT_NAME'])

更新:即使没有set :prefixed_redirects, true(默认值为false)在特立尼达下也能正常工作(它的行为应该与莺相同,因为机器人使用 JRuby-Rack)......request.env['SCRIPT_NAME']已正确设置为/context_path

我会尝试更新(如果它们不是最新的)JRuby-Rack/Warbler 以及 Sinatra 作为最后的手段,否则这可能需要详细了解正在发生的事情(特别是如果SCRIPT_NAME设置正确)。

最新更新