2012-08-29 48 views
4

我正在使用requirejs-rails gem以及各种第三方javascript。在开发中,这一切似乎都在工作......即使在预编译我的资产时,无论是在分段/制作(heroku)中,它都找不到资产。require.js和预编译资产w/rails

以jQuery为例(使用jquery-rails gem)。从如果我做

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 Heroku的控制台。.js文件“)

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

我requirejs护栏配置为:

shim: 
    jquery: 
    exports: '$' 
    jquery-ujs: 
    - jquery 
paths: 
    jquery: jquery.min 
    jquery-ujs: jquery_ujs 
我application.js.coffee

我有

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

你的环境/ production.rb是什么样的?请注意,引用“附加资产”的部分: #预编译附加资产(application.js,application.css和所有非JS/CSS已添加) #config.assets.precompile + =%w(search。 js) 这可能是您遇到的问题。我通常(因为我很懒)只是使用:“config.assets.precompile + =%w(* .js)” –

回答

0

我还没有使用requirejs,但是您检查了Rails.application.assets.paths以确定哪些资产在那里?另外,还要确保config.action_controller.asset_host正确设置在当前环境下

3

的方式requirejs-rails作品(从requirejs确实r.js)是,它会编译requirejs.yml或通过实际定义你的所有的JavaScript文件,它知道(通过路径在您的代码中调用)放入一个大文件,然后可以对其进行简化,压缩和缓存破坏(通过在名称中包含摘要)。因此,如果您有一个名为/assets/views/my_view.js的文件,可以通过http进行访问,该文件不再存在于生产环境中(因为它是您的application.js的一部分)。

在你的情况下,如果你在生产中看到application-<digest>.js(你可以通过查看你服务的应用程序页面的html来得到实际的摘要),你会看到jquery已经包含在那里(你可以看到许可证评论) 。

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