mem*_*per 7 gzip ruby-on-rails heroku
我已经在Heroku Cedar Stack上运行了一个Rails 3.1应用程序几个月了.我正在使用Rack :: Deflater中间件来gzip我的内容,并实现这一目标
config.middleware.insert_before ActionDispatch::Static, Rack::Deflater
Run Code Online (Sandbox Code Playgroud)
在我的staging.rb文件中.
但是,从上周开始,部署到Heroku时出现以下错误
Running: rake assets:precompile
rake aborted!
No such middleware to insert before: ActionDispatch::Static
Run Code Online (Sandbox Code Playgroud)
但是,运行rake中间件仍然会返回
use Rack::Cache
use Rack::Deflater
use ActionDispatch::Static
use Rack::Lock
Run Code Online (Sandbox Code Playgroud)
服务内容仍然是gzip压缩.但是,由于预编译失败,资产未编译(缩小).手动rake预编译:: asets也无济于事.
所以,我假设在预编译资产期间ActionDispatch :: Static不可用.所以我尝试在Rack :: Lock之前插入Rack :: Deflater,现在我的资产编译时没有任何错误消息,但是服务的内容不是gzip压缩的.
那么,我需要做什么,gzip和编译我的资产?我错过了什么?谢谢.
Rack::Deflater Rails 3.1已经使用了一个抬头,所以你不需要手动执行此操作.
但是,要在这里回答你的问题,我会假设你production.rb已经config.serve_static_assets = false确定了.
在ActionDispatch::Static当中间件仅用于serve_static_assets设置为true.Heroku实际注入此配置以覆盖您设置的任何内容(Injecting rails3_serve_static_assets部署时请参阅日志消息),但我不确定在部署的哪个阶段发生这种情况.
所以很可能你没有在assets:precompile运行时启用静态资产服务(注意这只是猜测,我不在Rails 3.1上,所以我可能错了)
我建议不要使用membLoper建议在你的rackup文件中手动添加它:
application.rb我仍然不明白为什么 Heroku 在资产预编译期间无法识别 ActionDispatch::Static。然而,Heroku 人员确实提出了解决此问题的方法。
Rack::Deflater 中间件需要插入 config.ru 文件而不是环境文件中。就像是,
require ::File.expand_path('../config/environment', __FILE__)
# Middleware to gzip content
use Rack::Deflater
run MyApplication
Run Code Online (Sandbox Code Playgroud)
这样,它就不会干扰资产预编译,并且仍然对所提供的内容进行 gzip 压缩。
任何有关 config.ru 如何工作以及 Rack::Deflater 现在所在位置的资源都非常受欢迎。
| 归档时间: |
|
| 查看次数: |
2992 次 |
| 最近记录: |