【问题标题】:Asset overloading on Rails engines: requiring a secondary gem asset file failsRails 引擎上的资产重载:需要辅助 gem 资产文件失败
【发布时间】:2012-04-12 00:06:58
【问题描述】:

我正在尝试构建一个“管理后端”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,一切都会再次运行。

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

【问题讨论】:

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


【解决方案1】:

我相信我完全按照你的描述做了,没有遇到你说的问题。

你确定没有其他事情发生吗?获取 ignored 的 require 行没有多大意义—— sprockets 应该包含所需的文件,或者如果找不到它则引发。只是默默地什么都不做似乎不对。

您可能会触发 sprockets 或 rails 资产管道使用它的错误 - 但更有可能的是,还有其他事情正在发生。

您确定您没有不小心在本地应用程序和/或引擎中提供了自己的空白“modernizr.js”文件,不小心覆盖了您想要从modernizr gem 中要求的文件?

sprockets require 行确实需要位于文件中任何代码之前的 cmets 中,它们必须位于初始的前言注释块中。这能吸引你吗?

或者可能不是您认为的其他东西。

我自己实际上并没有使用coffeescript,coffeescript有什么奇怪的地方吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多