我有一个Perl Catalyst应用程序,它通常使用-r参数启动。 我注意到了两种行为:
1)应用程序在代码的每次“虚拟更改”时正常重启(通过“虚拟更改”我的意思是添加一个空格或删除一个空格,像这样smth)
2)应用程序没有重启(相同的“虚拟更改”),显示“尝试重新启动服务器”文本并且应用程序在此状态下仍然被阻止(我必须 kill 手动)
行为取决于实际代码。似乎有一些与代码相关的东西会影响哪一行为在某一时刻起作用。行为是恒定的,即相同的代码具有2的恒定行为 应用程序本身似乎工作正常,没有任何错误或警告。
代码如何影响这种行为? (我的意思是一般) 哪些因素与重启机制有关?
答案 0 :(得分:1)
这是因为在较新版本的Oracle客户端中信号处理已发生变化。使用“ora_connect_with_default_signals”选项恢复默认信号处理程序。
以下是如何在DBIx :: Class模型(MyApp :: Model :: DB)中执行此操作:
connect_info => [
'dbi:Oracle:mydb',
'username',
'password',
{
ora_connect_with_default_signals => [ 'INT' ],
},
],
或在配置文件中:
<Model DBIC>
connect_info dbi:Oracle:mydb
connect_info username
connect_info password
<connect_info>
ora_connect_with_default_signals [ INT ]
</connect_info>
</Model>
答案 1 :(得分:0)
通过PSGI(即plackup -r
)使用独立服务器时,我看到了类似的行为,服务器重新启动一次,后续代码更改产生消息但没有重新启动。
但是,我从未见过内置服务器myapp_server.pl -r
以这种方式运行。对perl模块,YAML文件等的任何更改都会成功触发重新启动。
在我做过的简短研究中,我做了this discussion of Plack and restart。