在Heroku上合并和压缩JS/CSS的最佳方法

29
首先,根据这篇回答,在Heroku上,:cache => true选项对于stylesheet_link_tagjavascript_include_tag不起作用。这是真的吗?我发现:cache => true有时会生效,但有时不会(很奇怪!)
此外,这里最好的解决方案是什么?理想情况下,它能够无缝地合并和压缩所有CSS / JS。 Heroku Asset Packager声称可以做到这一点 - 还有更好的选择吗?
8个回答

23

我在Heroku上使用Jammit,效果很好。你可以在本地构建资产并检入到Heroku中。使用:

jammit --force

当前版本0.5.1在Heroku上存在问题,但您可以从git://github.com/documentcloud/jammit.git安装修复版本。

如果您使用的是Rails 3,请在Bundler的Gemfile中指定以下内容:

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

对于Rails 2.*版本

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

祝你好运。


8
我发现添加一个git pre-commit钩子非常有用,它可以编译和打包资产,然后将它们添加到当前提交中。
我的使用Jammit的pre-commit钩子看起来像这样(在.git/hooks/pre-commit中):
jammit
rake barista:brew
git add public/assets/*
git add public/javascripts/*

像这样,您所有的资产都将为您打包,您不再需要担心它。

4

2
Heroku的部署脚本是git push heroku。没有太多需要修改的地方。 - yfeldblum

3

我还没有在Heroku上试过,但Sprockets可能是个不错的选择。此外,在过去,我使用...

:cache => 'all.css'
:cache => 'all.js'

使用'true'的替代方案


1
如果您想使用Sprockets,请确保查看https://github.com/jeffrydegrande/sprockets_on_heroku。 Sprockets绝对是值得关注的东西,因为它将默认捆绑在Rails 3.1中(不确定它是否已经在Rails 3中)。 - webmat

1

这是一种不同的管理CSS/Javascript的方式,但您可能想要查看Rails插件shoebox

Shoebox可以进行合并、压缩和缓存。


0

0

但是这会将打包的资产放入 /tmp 目录下,根据 http://docs.heroku.com/constraints 的说明,这些资产不一定会在请求之间保留。 - Tom Lehman
你试过Jammit吗?http://documentcloud.github.com/jammit/ 我读到其他公共项目的几个提交,他们已经转向了这个,虽然我自己还没有尝试过。我得尽快亲自测试一下...不要选择预编译,让gem编译资产,然后清除其下面的任何文件,并查看它是否重新编译资产。我没有阅读Jammit的源代码以确认,但值得一试,除非你找到了其他东西。 - databyte

0

可能有多种方法可以实现这一点,但对我来说有效的方法是在推送之前进行缩小处理。然后我使用一个子树来将构建文件与“源”文件分开。例如,如果您构建到名为“dist”的文件夹中,则可以像这样将其推送到名为heroku/master的子树中:

git subtree push --prefix dist heroku master

只是不要忘记确保 dist 文件夹没有被忽略(通常情况下会默认忽略),所以请相应地编辑您的 .gitignore 文件。

--prefix 命令可以确保 dist 文件夹有效地成为该分支从视角上来说的“根”文件夹。


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