启用JavaScript的测试出错(Bootstrap 3,Rails 4,Travis CI)

我有奇怪的错误,只出现在CI环境中。 此错误不会出现在开发,生产甚至本地测试环境中。

ActionController::RoutingError: No route matches [GET] "/fonts/bootstrap/glyphicons-halflings-regular.svg" 

完整的跟踪可以在这里找到

在开发和生产环境中,成功请求/assets/bootstrap/glyphicons-halflings-regular.woff/fonts//assetssvgwoff部分有所不同。 JavaScript启用的所有错误都启用了测试(Poltergeist / PhantomJS驱动程序)。 定期的Capybara测试都是绿色的。 Chrome devtools表示,字体文件的请求是由jquery.js生成的,而不是页面或css文件。

这与bootstrap-sass gem有关。 我正在使用它的版本3.3.4.1和Rails 4.2。

我提出的问题非常相似,但略有不同:CI中的错误与/fonts/bootstrap/glyphicons-halflings-regular.woff 404相同,但dev, /fonts/glyphicons...路径不同/fonts/glyphicons...

对我有用的解决方案是在包含带SASS的bootstrap JS之前添加以下行:

 $icon-font-path: "bootstrap/"; @import 'bootstrap'; 

我最好的线索来自于gem的跟踪器中对此问题的评论: https : //github.com/twbs/bootstrap-sass/issues/480#issuecomment-49237119

如果您有类似我们的设置,您在Rails上手动安装了Bootstrap,并且必须执行一些手动CSS样式覆盖以将Glyphicon字体指向正确的路径。 (/ assets / botostrap …而不是/ fonts / bootstrap …)。 然而原始样式仍然存在于bootstrap.css中,即使它们被覆盖,但似乎PhantomJS仍在检测并使用这些原件。

在我们的例子中,我们必须在bootstrap.css中搜索所有对glyphicons-halflings的引用,并将路径更改为正确的路径。 在我们这样做之后,路由错误消失了。

祝好运!