Rails引擎上的资产重载:需要辅助gem资产文件失败

时间:2012-04-12 00:06:58

标签: ruby-on-rails asset-pipeline rails-engines

我正在尝试构建一个“管理后端”Rails引擎。假设引擎具有以下资产:

ENGINE/app/assets
├── javascripts
│   └── railsyard
│       ├── admin.js.coffee
│       ├── admin_customizations.js.coffee
...

admin.js.coffee需要admin_customizations.js.coffee的地方,即托管Rails应用程序准备覆盖的空文件。

[ENGINE/app/assets/javascripts/my_engine/admin.js.coffee]
#= require admin_customizations
# ...some code...

[ENGINE/app/assets/javascripts/my_engine/admin_customizations.js.coffee]
# Override this empty file to add custom JS behaviour!

一切都运作得很好,直到我试图要求一些来自次要宝石的资产:

[APP/app/assets/javascripts/my_engine/admin_customizations.js.coffee]
#= require modernizr # this line gets ignored
alert "Foobar"       # this line works

gem modernizr-rails是托管应用程序的依赖项,而不是引擎。 请注意,如果我尝试从资产文件中要求modernizr而不是某个引擎资产文件的覆盖,那么一切都会再次起作用。

有没有办法解决这种情况?

1 个答案:

答案 0 :(得分:0)

我相信我已经完成了你所描述的内容而没有你说你有的问题。

你确定没有其他事情发生吗?获取忽略的需求行没有多大意义 - 链接器应该包含所需的文件,如果找不到它则引发。只是默默无所事事似乎并不合适。

你可能会在链轮或轨道资产管道中使用它来触发错误 - 但更有可能的是,还有其他事情正在发生。

你确定你没有在本地应用程序和/或引擎中意外地提供了你自己的空白'modernizr.js`文件,意外地覆盖了你想要从modernizr gem那里获得的文件吗?

sprockets require行确实需要位于文件中任何代码之前的注释中,它们必须位于初始的前置注释块中。可能会让你?

或者其他可能实际上并不是你认为的东西。

我自己并没有实际使用coffeescript,某种方式与coffeescript有些奇怪?