Rails文件仍保留在生产环境中-有时

时间:2018-11-01 18:32:22

标签: ruby-on-rails ruby

我有一个仅在生产包装盒上出现的问题。在DEV和TEST环境中正常工作。问题是提供的页面已缓存-无法反映我最近所做的更改。奇怪的是它不会一直发生。如果我清除了浏览器缓存,则在关闭浏览器然后打开并重新加载应用程序之前,它可能一直起作用。然后,它再次失败。有时,我可以在IE,Chrome和Firefox中加载页面。但是,如果我关闭Firefox并再次打开它-则旧页面可能会失败。 不确定是否重要,但是我要更改的文件是haml文件。 到目前为止,这是我尝试过的:

在生产包装盒上:

 rm -rm tmp/cache/assets

 rake assets:clobber
 rake assets:precompile
 rake assets:clean
 rake tmp:cache:clear
 rails tmp:clear
 rails restart

“重新启动Rails”后,它似乎可以工作一段时间了。同样,在所有浏览器中都可以使用,直到我关闭Firefox几次...然后恢复为旧文件。在打开和关闭Chrome的情况下也可以正常工作-然后恢复为旧文件。 我在这里发现另一个问题,有人设置了不缓存。 在application_controller.rb

 before_filter :set_cache_buster

 def set_cache_buster
     response.headers["Cache-Control"] = "no-cache, no-store"
     response.headers["Pragma"] = "no-cache"
     response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
 end

在config / environments / production.rb中:

 config.cache_classes = false
 config.cache_store = false
 config.action_controller.perform_caching = false

如果我尝试从控制台运行“ Rails.cache.clear”,则会得到:

 NoMethodError: undefined method 'clear' for false:FalseClass

这是一个非常奇怪的问题。有人想到我可以尝试的其他东西吗?

1 个答案:

答案 0 :(得分:1)

如果您的生产环境在云中,则无法保证文件系统的状态或将运行多少实例,除非您以这种方式进行了专门设置。一个请求可能会转到实例A,而下一个请求可能会转到实例B。每个实例都有自己的文件系统和缓存。

此外,云实例会定期移动,您将丢失缓存。

您需要使用诸如memcachedRedis之类的缓存服务器,而不是在文件系统上进行缓存。或者使您的生产环境在单个服务器上运行,但是无法扩展。