为什么在使用WebRick时,我会在生产环境中得到“cache:[GET /] miss”?

9

在生产环境中,我无法使用WebRick测试我的网站,因为它会引发缓存错误。在开发和测试模式下,一切都运行得很完美。

我已经在config/environments/production.rb中设置了以下选项:

config.serve_static_assets = true

然后我跑了:

bundle exec rake assets:precompile

现在我启动服务器:

david$ rails s -e production
=> Booting WEBrick
=> Rails 3.2.1 application starting in production on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-01-31 19:52:35] INFO  WEBrick 1.3.1
[2012-01-31 19:52:35] INFO  ruby 1.9.3 (2011-10-30) [x86_64-darwin11.2.0]
[2012-01-31 19:52:35] INFO  WEBrick::HTTPServer#start: pid=13329 port=3000

当我访问http://localhost:3000时,会出现"We're sorry, but something went wrong."的提示。在终端中输出如下:

cache: [GET /] miss

我卡在这里了。我不知道该怎么做。


你在application.rb中更改了config.cache_store吗? - Baldrick
不,这个应用程序是新的,我还没有碰过那个文件。 - David Morales
好的。production.log 中有错误吗? - Baldrick
4个回答

5
问题出在资产管道上,必须在生产模式下进行良好配置,因为文件不会自动预编译。
在我的情况下,我插入了一个 javascript 文件(使用 javascript_include_tag),它只存在于一个页面中,因此未包含在 application.js 明细表中。
在这种情况下,当运行 assets:precompile 时,资产管道不会预编译该文件。
为了包含缺失的文件,我们必须编辑 config/environments/production.rb,并添加以下行:
config.assets.precompile += %w( script1.js )

您会注意到这行代码已经存在,但被注释掉了。请阅读注释以获得更多解释。如需更多信息,请查看官方资产管道指南


0
这条消息是由Rack::Cache中间件发送的,提示页面丢失。 如果您的Rails应用程序不需要使用页面缓存,只需在config/application.rb文件中删除Rack::Cache即可。
require 'rack/cache'

module DemoApp
  class Application < Rails::Application
    config.middleware.delete Rack::Cache
    # ...
  end
end

1
我不是那个给你点踩的人 - 但告诉原帖作者不要使用某个功能并不能解决他的问题。 - Basic

0
作为临时解决方案,以下方法对我有效。
我更改了config/environments/production.rb文件中的config.assets.compile行,将其从false更改为true
# Don't fallback to assets pipeline if a precompiled asset is missed
 config.assets.compile = true

0

为了在生产环境中运行应用程序,以便您不会遇到缓存:[GET /] miss,请检查您的{project}/public文件夹,是否存在任何资产文件夹。

如果没有,则使用以下命令预编译资产:

bundle exec rake assets:precompile

完成后:

在production.rb中将config.assets.compile设置为true

然后在生产环境中重新启动WebApp。

这种方法对我有效,希望对您也有用。

如果您正在使用rails 3.2.0,则会出现[GET /] miss,但您的应用程序将正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接