我的个人 Rails 应用程序有点奇怪。
一年多以来,我一直在使用 Nginx、Unicorn 和 RVM 在 VPS 上运行它,我在生产设置方面不是最好的,但我想开始做得更好,所以我在此主题上关注了 Ryan Bates 的Railscast它似乎在很长一段时间内都运行良好,但最近我注意到,为了在添加新文章时刷新主页,我必须杀死独角兽进程,然后重新启动独角兽。
有没有其他人遇到过这个问题?如果是这样,我将如何去纠正它?
我的个人 Rails 应用程序有点奇怪。
一年多以来,我一直在使用 Nginx、Unicorn 和 RVM 在 VPS 上运行它,我在生产设置方面不是最好的,但我想开始做得更好,所以我在此主题上关注了 Ryan Bates 的Railscast它似乎在很长一段时间内都运行良好,但最近我注意到,为了在添加新文章时刷新主页,我必须杀死独角兽进程,然后重新启动独角兽。
有没有其他人遇到过这个问题?如果是这样,我将如何去纠正它?
我应该早点回答这个问题,但被转移了,我的问题原来是我已经命名了试图检查当前日期的范围,但是当我在模型中执行 Time.now 时,当前日期总是与将当前日期/时间从控制器传入范围的预期不同,效果很好。
新答案:
根据您的评论,这很可能不是 Unicorn / Nginx 问题,而只是 Rails 在开发和生产之间切换的问题。尝试在本地运行您的站点,但在生产模式下。
很可能每次有人发布新文章时,您都需要清除缓存。如果您获得大量流量,您将需要缓存,但忘记重置缓存可能会导致您看到的问题。
老答案:
你用 capistrano 吗?有一套使用独角兽和 capistrano 的食谱。他们有一个重新加载独角兽的任务:
这在文档中提到:
http://unicorn.bogomips.org/SIGNALS.html
HUP - 重新加载配置文件并优雅地重新启动所有工作人员。如果“preload_app”指令为 false(默认值),那么工作人员也会在重新启动时获取任何应用程序代码更改。如果“preload_app”为真,则应用程序代码更改将无效;在这种情况下,必须使用 USR2 + QUIT(见下文)来加载更新的代码。重新加载应用程序时,将调用 Gem.refresh,以便您的应用程序的更新代码可以获取新安装的 RubyGems。不建议您在 Unicorn 运行时卸载应用程序所依赖的库,因为重生的工作人员在无法加载卸载的依赖项时可能会进入生成循环。