Ruby on rails 我可以在Heroku上使用Bower和Rails,并且仍然将Bower_组件目录保留在GIT之外吗?

Ruby on rails 我可以在Heroku上使用Bower和Rails,并且仍然将Bower_组件目录保留在GIT之外吗?,ruby-on-rails,node.js,heroku,bower,Ruby On Rails,Node.js,Heroku,Bower,我刚刚开始与bower合作管理客户端依赖项。我已将Bower设置为将所有文件安装到/vendor/assets/components中 然后我运行bowerinstall来评估bower.json文件并安装所有依赖项 #/bower.json { "name": "My-App", "dependencies": { "angular": "1.0.8", "b

我刚刚开始与bower合作管理客户端依赖项。我已将Bower设置为将所有文件安装到
/vendor/assets/components

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

#/bower.json

{
  "name": "My-App",
  "dependencies": {
    "angular": "1.0.8",
    "bootstrap": "3.0.0"
  }
}
最后,根据我阅读的教程的指示,我已经从GIT中删除了components目录

#.gitignore

#...
# Ignore all stuff manged by bower
/vendor/assets/components
因此,该项目在slug中不包括任何这些资产,并且需要运行
bower install
才能安装它们

这对我来说似乎是明智的,就像从项目中分离实际的gem是明智的一样。它还遵守的原则,并明确声明和隔离依赖关系

但是,排除依赖项会导致资产编译阻塞。。。 但是,当我推到Heroku时,资产预编译失败,因为尚未添加assset,因此当链轮尝试求值时:

#application.css.scss
/* ...
*= require bootstrap/dist/css/bootstrap
*= require_self
*= require_tree .
*/
它发现在
bootstrap/dist/css/bootstrap
中找不到任何东西,因为bower还没有安装任何东西

一种可能的解决方案-使用package.json运行安装后脚本 我按照建议添加一个包含以下内容的
package.json
文件:

"dependencies": {
    "bower": "0.6.x"
},
"scripts": {
    "postinstall": "./node_modules/bower/bin/bower install"
}
但是,
bower安装
不需要作为安装后脚本运行,而是作为推送后、资产前编译脚本运行。我也不清楚Heroku是否会为Rails应用程序运行npm预处理器

弄清楚如何运行bower安装还是只在GIT中包含文件更好? 有两种解决方案。第一个也是最简单的方法是在本地运行
bowerinstall
,并将文件包含在GIT中。这没什么大不了的,但我想坚持12因素应用程序的原则

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

这是否以任何简单的方式可行,还是只在本地编译bower资产更好

后记 最后我的结论是在本地运行
bowerinstall
,并将文件包含在GIT中。尽管12因素原则表明这可能不是正确的路线,但我还没有发现它在实践中会产生任何成本,我更倾向于这样做,而不是陷入定制构建包的复杂组合中。

您应该尝试使用。在安装两个构建包时,您还可以在安装nodejs之后但在安装ruby构建包之前运行postinstall脚本。这将允许您在预编译资产之前通过
bower安装
将其取下

我已经编写了一个protip,介绍了如何处理Heroku+Rails+Bower场景


非常感谢您的提示。我不知道安装后的技巧!问题很好,很详细。我有一个问题:将他们排除在git之外有什么好处/需要?@gwho我认为这是最佳实践。不过,我已经更新了问题,说明我最终没有走这条路。我仍然认为这可能是明智的,但迄今为止还没有任何成本。