部署 - 使用Phusion Passenger和Rails时启动缓慢

为了跳上Phusion Passenger的乐队,我们为一个小型rails应用程序设置了一个临时服务器来测试。

到目前为止,使用它非常好,它使安装/配置和部署应用程序变得轻而易举。 问题是我们使用的网站不会经常受到影响,似乎在后台关闭服务器。 这意味着当某人进入该站点时,他们会等待很长时间,直到它启动一个新服务器来处理该请求。 我们已经阅读了文档,尝试了很多不同的设置(智能/智能-lv2模式,乘客时间等),但仍然没有找到真正的解决方案。

在浏览Google结果后,我们无法真正找到有用的信息。 目前,我们有一个cron作业,每隔一段时间发出一次请求,试图让服务器保持运行。

是否有其他人遇到此问题,您对修复有任何建议吗?

tsdbrown asked 2019-09-10T07:26:40Z
7个解决方案
117 votes

发生的事情是您的应用程序和/或ApplicationSpawners因超时而关闭。 要处理新请求,Passenger必须启动应用程序的新副本,即使在快速计算机上也可能需要几秒钟。 要解决此问题,可以使用一些Apache配置选项来使应用程序保持活动状态。

这是我在服务器上所做的具体操作。 PassengerSpawnMethod和PassengerMaxPreloaderIdleTime是您遇到的最重要的配置选项。

# Speeds up spawn time tremendously -- if your app is compatible. 
# RMagick seems to be incompatible with smart spawning
# Older versions of Passenger called this RailsSpawnMethod
PassengerSpawnMethod smart

# Keep the application instances alive longer. Default is 300 (seconds)
PassengerPoolIdleTime 1000

# Keep the spawners alive, which speeds up spawning a new Application
# listener after a period of inactivity at the expense of memory.
# Older versions of Passenger called this RailsAppSpawnerIdleTime
PassengerMaxPreloaderIdleTime 0

# Just in case you're leaking memory, restart a listener 
# after processing 5000 requests
PassengerMaxRequests 5000

通过使用“智能”生成模式并关闭PassengerMaxPreloaderIdleTime,Passenger将始终在应用程序中保留1个应用程序副本(在启动Apache之后的第一个请求之后)。 个人PassengerMaxPreloaderIdleTime 0听众将从这个副本PassengerPreStart,这是一个超级便宜的操作。 它发生得如此之快,你无法判断你的应用程序是否必须产生一个监听器。

如果你的应用程序与智能产生不兼容,我建议保留一个大的PassengerPoolIdleTime并定期使用curl和cronjob或monit等命中你的网站以确保监听器保持活跃状态。

“乘客用户指南”是这些和更多配置选项的绝佳参考。

编辑:如果您的应用与智能产生不兼容,那么有一些非常好的新选项

# Automatically hit your site when apache starts, so that you don't have to wait
# for the first request for passenger to "spin up" your application. This even
# helps when you have smart spawning enabled. 
PassengerPreStart http://myexample.com/
PassengerPreStart http://myexample2.com:3500/

# the minimum number of application instances that must be kept around whenever 
# the application is first accessed or after passenger cleans up idle instances
# With this option, 3 application instances will ALWAYS be available after the
# first request, even after passenger cleans up idle ones
PassengerMinInstances 3

因此,如果您将PassengerPreStart和PassengerMinInstances结合起来,Passenger将在加载apache后立即启动3个实例,并且将始终保持至少3个实例,因此您的用户很少(如果有的话)看到延迟。

或者,如果您已经使用PassengerMaxPreloaderIdleTime 0进行智能产卵(推荐),您可以添加PassengerPreStart以获得立即启动的额外好处。

非常感谢phusion.nl的英雄!

John Douthat answered 2019-09-10T07:27:54Z
40 votes

只是因为有任何nginx服务器用户绊倒这个问题,'PassengerMaxRequests'和'PassengerStatThrottleRate'指令都没有转换为nginx。 然而,其他人做:

rails_spawn_method smart;
rails_app_spawner_idle_time 0;
rails_framework_spawner_idle_time 0;
passenger_pool_idle_time 1000;

HTH!

编辑rails_spawn_method在乘客3中被弃用改为使用

passenger_spawn_method smart; 

其他一切都很好,直到约会。

Gav answered 2019-09-10T07:28:40Z
4 votes

您还可以使用PassengerMinInstances:

[http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances]

这可以与PassengerPreStart结合使用

Josh answered 2019-09-10T07:29:18Z
2 votes

回覆:

# Additionally keep a copy of the Rails framework in memory. If you're 
# using multiple apps on the same version of Rails, this will speed up
# the creation of new RailsAppSpawners. This isn't necessary if you're
# only running one or 2 applications, or if your applications use
# different versions of Rails.
RailsFrameworkSpawnerIdleTime 0

只需添加一些内容即可。

当前版本中的默认spawn方法是“smart-lv2”,它跳过框架spawner,所以设置除非你,否则框架spawner超时无论如何都不会有效将spawn方法显式设置为“smart”。

资源:[http://groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli=1]

Shuoling Liu answered 2019-09-10T07:30:03Z
1 votes

如果您的主机是我的共享服务器,则无法更改设置并且无法使用cron作业。

answered 2019-09-10T07:30:28Z
1 votes

我也有这个问题,但我无法更改乘客设置,因为我没有此文件的写入权限。 我找到了一个工具([http://www.wekkars.com]),可以让我的应用程序快速响应。 也许这也可以成为您的解决方案。

SteenhouwerD answered 2019-09-10T07:30:54Z
0 votes

检查乘客的版本。 对于旧版本,它是RailsSpawnMethod <string>

如果是这样(如果我没记错的话),请在所有配置指令中替换Passenger with Rails,或者查找旧的乘客文档以获取更多详细信息

JmJ answered 2019-09-10T07:31:24Z
translate from https://stackoverflow.com:/questions/853532/slow-initial-server-startup-when-using-phusion-passenger-and-rails