Rails + Heroku + Jammit

AnA*_*ice 9 ruby-on-rails heroku jammit ruby-on-rails-3

我正在努力在我的Rails 3应用程序上安装Jammit,然后部署到Heroku.

我安装了Jammit Gem,并配置了assets.yml就好了,它适用于dev.但是当我推送到heroku时,文件是404'ing.

Jammit的使用说明说:"你可以在你的Rakefile和其他脚本中轻松使用Jammit:

require 'jammit'
Jammit.package!
Run Code Online (Sandbox Code Playgroud)

我不是在关注它在哪里/如何运作.在我的网站命令中运行Jammit就像在Mac上运行会产生一个找不到的命令.

任何Jammit用户都能帮助我了解如何使用Jammit进入生产阶段?

谢谢

J_M*_*rey 6

我在Heroku上的Rails 3.0.7应用程序上使用jammit

gem "jammit", :git => "git://github.com/documentcloud/jammit.git"
Run Code Online (Sandbox Code Playgroud)

我在rake文件中有这个,在提交/部署之前打包资产

desc 'jammit'
  task :jam  => :environment do
  require 'jammit'
  Jammit.package!
end
Run Code Online (Sandbox Code Playgroud)

这是在.git/hooks/pre-commit中,所以它会自动完成

echo "jamming it"
rake jam
git add public/assets/*
git add public/javascripts/*
Run Code Online (Sandbox Code Playgroud)

默认情况下,Heroku上的过期时间只有12小时,以增加它(因为我有一个我有信心的缓存破坏方案)我把它放在config/initializers/heroku.rb中

module Heroku
  class StaticAssetsMiddleware
    def cache_static_asset(reply)
      return reply unless can_cache?(reply)
      status, headers, response = reply        
      headers["Expires"] = CGI.rfc1123_date(11.months.from_now)
      build_new_reply(status, headers, response)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

为了减轻Heroku Rails服务器的负载,我还在CloudFlare上使用免费帐户,该帐户提供轻量级的反向代理/ cdn,具有一些不错的分析和安全功能.

当我开始缓存常见内容时,这件事真的会尖叫!


mar*_*ark 3

您可以像我一样,使用 jammit force 打包您的资产,将所有内容上传到 s3 并在 Rails 中定义资产主机。这样做的另一个好处是可以让您的 slug 更小、响应更快,因为您可以将公共目录添加到 .slugignore 。

或者,由于只读文件系统,您需要弄清楚如何使 heroku 版本正常工作。