我有一个正常运行的Rails 4.1应用程序,还有一个页面/app
,可以作为Backbone + Marionette的单页Web应用程序。
当我推送到Heroku时,我的应用程序将在所有页面上正常运行,直到我访问/app
页面(加载Backbone环境),此时应用程序将超时。任何设备的后续请求都可以正常工作。然而,如果dyno进入睡眠状态,重新唤醒之后的第一个请求也会超时。
我认为这与资产预编译有关,但我不清楚为什么资产在dyno进入睡眠状态时会过期。
大约有50个js文件,编译时大约300kb。
此问题是否存在已知问题或解决方法?
答案 0 :(得分:1)
我的第一直觉告诉我你有一个只有一个dyno的免费等级heroku应用程序。在一小时不活动后,你的dyno会进入睡眠状态。为了再次唤醒它,路由器发送的第一个请求会有一些延迟。
可能是你的/ app路径很重,第一次加载需要很长时间。与缓存几乎相同。当你有一个繁重的请求时,它需要花费大量的时间来处理它,但是那些缓存其中的内容非常快。
我找不到关于资产管道的任何确认,但如果后续请求运行得很好,我可以想象睡眠工作者是主要原因。也许你应该实施一个小的rake任务,防止你的工人闲置。例如,如果每55分钟执行一次任务,那么您的工作人员将永远不会再次入睡。
答案 1 :(得分:0)
我能想到的最好的解决方法是use a CDN用于您的资产,这会通过从另一个系统(通常是S3)请求您的资产来消除您的应用对Heroku服务器的依赖性CloudFront的)
如果你想要
,我可以详细说明如何做到这一点其次,正如@Rails4Guides.com
所提到的,你应该知道Heroku免费等级的限制是让你的dyno在一小时不活动后进入睡眠状态。这是为了保持750 hour free limit for AWS instances(Heroku建立起来)
要解决此问题,您需要invest in another Dyno ($35/mo),或者如上所述,运行一项小任务,每小时对您的应用进行一次ping操作(保持您的dyno正常运行)