我实现了一个小的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设置正确)。