我可以在Heroku上使用Bower和Rails,并且仍然保持Gower的bower_components目录不变?

我刚开始使用bower来pipe理客户端依赖项。 我已经将Bower设置为将所有文件安装到/vendor/assets/components

然后运行bower install来评估bower.json文件并安装所有依赖项

 #/bower.json { "name": "My-App", "dependencies": { "angular": "1.0.8", "bootstrap": "3.0.0" } } 

最后,按照我读过的教程的指示,我已经从GIT中删除了组件目录。

 #.gitignore #... # Ignore all stuff manged by bower /vendor/assets/components 

因此,该项目不包括这些资产中的任何资产,并需要bower install运行以安装它们。

这对我来说似乎是合情合理的,就像将实际gem与项目脱钩是明智的一样。 它也遵守12因子应用程序的原则,并明确声明和隔离依赖关系

但是,排除依赖性会导致资产编译呛…

但是,当我推到Heroku时,资产预编译失败,因为还没有添加配套,所以当链轮试图评估:

 #application.css.scss /* ... *= require bootstrap/dist/css/bootstrap *= require_self *= require_tree . */ 

它发现在bootstrap/dist/css/bootstrap中找不到任何东西,因为bower还没有安装任何东西。

一个可能的解决scheme – 使用package.json来运行安装后的脚本

我已经按照这个教程build议添加一个package.json文件,内容如下:

 "dependencies": { "bower": "0.6.x" }, "scripts": { "postinstall": "./node_modules/bower/bin/bower install" } 

然而, bower install需要不是作为安装后脚本运行,而是作为推后预置资源编译脚本运行。 我也不清楚Heroku是否会为Rails应用程序运行npm预处理器

弄清楚如何运行bower install或只是在GIT中包含文件是否更好?

有两个解决scheme。 第一个也是最简单的就是简单地在本地运行bower install ,并将这些文件包含在GIT中。 这不是什么大问题,但我想坚持12因子应用程序的原则。

第二个解决scheme是资产预编译之前找出如何启动npm并在Heroku上运行bower install

这是可行的任何简单的方法,还是更好地简单编译本地资产资产?

后记

我最后的结论是简单地在本地运行bower install ,并将文件包含在GIT中。 尽pipe12因素原则表明这可能不是正确的路线,但是我并没有发现它在实践中有任何成本,并且倾向于而不是陷入定制组装复杂的复杂性。

你应该尝试使用ddollar的多buildpack 。 当安装两个buildpack时,你可以在安装nodejs之后,安装ruby buildpack 之前运行postinstall脚本。 这将允许您在预编译之前使用bower install来降低您的资产。

我已经把一个protip放在一起了解如何处理Heroku + Rails + Bower场景。

https://coderwall.com/p/6bmygq