9

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

我安装了 Jammit Gem,并配置了 assets.yml,它可以在 dev 上运行。但是当我推到heroku时,文件是404的。

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

require 'jammit'
Jammit.package!

我没有关注它在哪里/如何工作。像在 Mac 上一样在我的站点命令中运行 Jammit 会产生找不到命令。

任何 Jammit 用户能够帮助我了解如何使用 Jammit 迁移到生产环境?

谢谢

4

5 回答 5

6

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

gem "jammit", :git => "git://github.com/documentcloud/jammit.git"

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

desc 'jammit'
  task :jam  => :environment do
  require 'jammit'
  Jammit.package!
end

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

echo "jamming it"
rake jam
git add public/assets/*
git add public/javascripts/*

默认情况下,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

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

当我开始缓存公共内容时,这东西真的会尖叫!

于 2011-12-08T16:58:06.200 回答
3

您可以像我一样使用 jammit force 打包您的资产,将所有内容上传到 s3 并在 rails 中定义资产主机。这具有使您的 slug 更小且响应更快的额外优势,因为您可以将公共目录添加到 .slugignore 。

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

于 2010-12-10T20:28:50.300 回答
2

您还可以使用 git pre-commit 钩子来确保在推送到 heroku(或任何服务器)之前打包您的资产。有关示例,请参见https://gist.github.com/862102 。您可以将该文件复制到项目目录中的 .git/hooks/pre-commit 中。

于 2011-07-01T19:22:25.363 回答
1

这是解决方案

https://github.com/kylejginavan/heroku_jammit

于 2011-09-17T00:22:47.950 回答
0

Heroku 有一个只读文件系统,因此 Jammit 无法实际存储压缩和缩小的 CSS/JS 文件。

这是一篇关于 heroku 上资产打包挑战的非常好的文章:http: //jimmycuadra.com/posts/the-challenge-of-asset-packaging-on-heroku

于 2011-11-23T10:41:08.687 回答