Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Heroku上组合和缩小JS/CSS的最佳方法_Ruby On Rails_Heroku_Minify_Asset Management - Fatal编程技术网

Ruby on rails 在Heroku上组合和缩小JS/CSS的最佳方法

Ruby on rails 在Heroku上组合和缩小JS/CSS的最佳方法,ruby-on-rails,heroku,minify,asset-management,Ruby On Rails,Heroku,Minify,Asset Management,首先,根据,在Heroku上,stylesheet\u link\u tag和javascript\u include\u tag上的:cache=>true选项不起作用。这是真的吗?我发现,:cache=>true偶尔会起作用,但并不总是(奇怪!) 还有,这里最好的解决方案是什么?理想情况下,它将无缝地结合并缩小所有CSS/JS。声称这样做——有更好的选择吗?我还没有在heroku上尝试过,但可能会有好处。而且,在过去,我在这方面运气更好 :cache => 'all.css' :cac

首先,根据,在Heroku上,
stylesheet\u link\u tag
javascript\u include\u tag
上的
:cache=>true
选项不起作用。这是真的吗?我发现,
:cache=>true
偶尔会起作用,但并不总是(奇怪!)


还有,这里最好的解决方案是什么?理想情况下,它将无缝地结合并缩小所有CSS/JS。声称这样做——有更好的选择吗?

我还没有在heroku上尝试过,但可能会有好处。而且,在过去,我在这方面运气更好

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

这是一种不同的方式来管理CSS/Javascript,而不是“true”

,但是您可能需要查看Rails插件


Shoebox可以进行组合、缩小和缓存。

GitHub对此有一个很好的答案,我相信您可以修改Heroku的部署脚本以集成:


项目名称说明了一切:


我在Heroku上使用Jammit。效果很好。您可以在本地构建资产并登录heroku。使用

jammit --force
当前版本0.5.1在heroku上工作时存在问题,但您可以从安装固定版本git://github.com/documentcloud/jammit.git

如果您使用的是Rails 3,请在绑定器文件中指定以下内容:

gem "jammit", :git => "git://github.com/documentcloud/jammit.git"
对于Rails 2*

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

祝你好运。

我发现,在这种情况下,添加一个git预提交钩子来编译和打包资产,然后将它们添加到当前提交中非常方便

使用Jammit的我的代码如下所示(在
.git/hooks/pre-commit
中):


这样,您的所有资产都将为您打包,您不必再担心了。

以下是压缩资产的配置选项


可能有多种方法可以做到这一点,但对我来说,有效的方法是在推之前缩小尺寸。然后,我使用子树将构建文件与“源”文件分开。因此,例如,如果您构建到一个名为“dist”的文件夹,您可以推送到一个名为heroku/master的子树,如下所示:

git subtree push --prefix dist heroku master
只是别忘了确保dist文件夹没有被忽略(默认情况下通常是这样)——因此相应地编辑.gitignore文件


--prefix命令确保dist文件夹从该分支的角度有效地成为“root”文件夹。

但这会将打包的资产放入
/tmp
,根据,它不一定会在请求之间停留。您尝试过Jammit吗?我已经阅读了其他公共项目的一些提交,虽然我自己还没有尝试过,但已经切换到这个。很快有一天我会亲自测试的。。。不要选择预编译,让gem编译资产,然后清除它下面的任何文件,看看它是否重新编译资产。我还没有阅读Jammit的源代码进行确认,但除非你找到其他东西,否则值得一试。Heroku部署脚本是
git push Heroku
。不需要太多修改。如果要使用链轮,请确保签出。链轮绝对值得关注,因为它将在Rails3.1中默认绑定(不确定是否在Rails3中)。
config.assets.css_compressor = :yui
config.assets.js_compressor = :uglifier
config.assets.compress = true


gem 'uglifier'
gem 'yui-compressor'
git subtree push --prefix dist heroku master