4

我正在使用requirejs-rails gem以及各种 3rd 方 javascript。在开发中,这一切似乎都在工作......即使在预编译我的资产时,但是在登台/生产(heroku)中它找不到资产。

以 jQuery 为例(使用 jquery-rails gem)。如果我这样做,从heroku控制台

Rails.application.assets.find_asset('jquery.min')它找到资产 (/app/vendor/bundle/ruby/1.9.1/gems/jquery-rails-2.1.1/vendor/assets/javascripts/jquery.min.js")。

但是,如果我尝试浏览它,domain.com/assets/jquery.min.js我会得到 404。

我的 requirejs-rails 配置是:

shim:
  jquery:
    exports: '$'
  jquery-ujs:
    - jquery
paths:
  jquery: jquery.min
  jquery-ujs: jquery_ujs

在我的 application.js.coffee 我有

require ['jquery', 'jquery-ujs'], ($) ->
  // ...
4

2 回答 2

3

工作方式requirejs-rails(实际上是来自 requirejs 的 r.js)是将所有它知道的 javascript 文件(通过代码中的路径requirejs.yml或通过代码中的实际定义调用)编译成一个大文件,然后可以对其进行 uglified、压缩和cache-busted(通过在名称中包含摘要)。因此,如果您有一个在 dev 中可通过 http 访问的名为的文件/assets/views/my_view.js不再存在于生产环境中(因为它是您的application.js.

在您的情况下,如果您application-<digest>.js在生产中查看(您可以通过查看所服务应用程序页面的 html 来获取实际摘要),您将看到 jquery 已经包含在其中(您可以查看许可证注释)。

所以文件就在那里,它被正确地作为一部分提供application-<digest>.js,你不应该在生产中依赖它直接可用。由于资产管道和 requirejs-rails 插件的重点是将所有文件编译成一个缩小的压缩文件以提高页面性能。

于 2012-10-01T18:14:09.753 回答
0

我没有使用过requirejs,但是你检查Rails.application.assets.paths过哪个有资产吗?还要确保config.action_controller.asset_host在当前环境中正确设置

于 2012-09-26T14:00:42.160 回答