我有一个Perl/Catalyst WebAapp在Windows IIS上运行,带有FastCGI。我正在尝试将应用程序从Windows 2012 R2/IIS8.5移动到2019/IIS 10旧版:Windows 2012 R2/IIS 8.5(Perl:5.20.2(x64)/催化剂:5.90091)新版本:Windows 2019/IIS 10(Perl:5.32(x64)/催化剂:5.90129美元)
问题:我遇到的问题是对uri_for的调用似乎使用了相对路径(基于当前页面)而不是根路径。例如:[% c.uri_for('/static/css/vendor/bootstrap/3.3.5/bootstrap.min.css')%]在登录时指向:http://testapp.net/login/static/css/vendor/bootstrap/3.3.5/bootstrap.min.css而不是http://testapp.net/static/css/vendor/bootstrap/3.3.5/bootstrap.min.css
我将根目录($c-〉config-〉{root})设置为我的Catalysts根文件夹(c:\inetpb\MyApp\root),这在我的2012 R2机器上已经运行了6年了。有什么想法可以在IIs 10上解决这个问题吗?
PS:我确实从旧服务器复制了现有的Perl安装,它仍然做同样的事情,排除了Perl/Catalyst版本。
1条答案
按热度按时间iq0todco1#
经过一番调查(感谢池上和霍布斯的建议)
我发现用于修复由Web服务器的FastCGI传递的变量PATH_INFO和SCRIPT_NAME的Plack::Middleware::IIS6ScriptNameFix未在IIS 10中运行。
修复程序中的逻辑仅适用于IIS 6.0到8.5,不会在IIS 10上运行。更新此模块中的代码以与IIS 10一起使用后,问题得到解决。
我确实在这个模块上打开了一个issue,它是由作者MIYAGAWA解决的。他已经发布了Plack模块的更新,并包含了一个强制选项,使中间件修复程序能够在任何IIS版本上运行。
总之,要解决此问题:
1.更新plack至最新版本1.0049(cpanm Plack)
1.找到应用程序.psgi文件
1.增加以下内容:启用“IIS 6ScriptNameFix”,强制=〉1;