0

当我最近开始使用我的应用程序的移动版本时,我意识到我没有使用为桌面客户端编写的所有 javascript 代码。所以我把这个放进去application.html.erb

<% if mobile_agent? %>
  <%= javascript_include_tag "mobile" %>
  <%= stylesheet_link_tag "mobile", :media => "all" %>
<% else %>
  <%= javascript_include_tag "desktop" %>
  <%= stylesheet_link_tag "desktop", :media => "all" %>
<% end %>

在 app > assets > javascripts 我创建了这个结构

- desktop.js
- mobile.js
- desktop/file1.js
- desktop/file2.js
- mobile/file1.js
- mobile/file2.js
- shared/file1.js
- shared/file2.js

在 mobile.js 中:

//= require_tree ./mobile
//= require_tree ./shared

在 desktop.js 中

//= require_tree ./desktop
//= require_tree ./shared

在开发环境中运行良好,但是当我部署到 Heroku 时,它给了我一个错误:

Completed 500 Internal Server Error in 100ms
ActionView::Template::Error (mobile.js isn't precompiled):
    8:   <meta name="format-detection" content="telephone=no">

    11:     <%= javascript_include_tag "mobile" %>
    9: 
    12:     <%= stylesheet_link_tag "mobile", :media => "all" %>
    10:   <% if mobile_agent? %>
  Parameters: {"community_category"=>"swingdancing", "city"=>"stockholm"}
  app/views/layouts/application.html.erb:11:in 78182492067426179_45617280'
    13:   <% else %>
Completed 500 Internal Server Error in 2ms
  app/controllers/communities_controller.rb:20:in `show'
Processing by ErrorsController#show as HTML
    14:    <%= javascript_include_tag "desktop" %>
  /app/vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/sprockets/helpers/rails_helper.rb:142:in Error during failsafe response: mobile.js isn't precompiled

是什么导致了这个错误,我该如何解决?

4

1 回答 1

0

该怎么办 ?

只需添加

 config.assets.precompile += %w(mobile.js)

config/application.rb

为什么 ?

当您部署到生产环境时,默认情况下 rails 使用资产管道

这意味着不是直接提供 .rails 中的文件,而是assets/假定您已经rake assets:precompile预先运行,并且在另一个文件夹中存在您的资产的连接、压缩和缩小版本。

这意味着您打算从浏览器加载的每个资产都应该进行预编译。好处是,您无需提供许多人类可读的文件,而是只提供一些已缩小的文件 - 更少的连接,更少的体积 = 更快的加载时间。

此功能在开发模式下无效,因为您必须在每次请求时重新编译资产,而且能够读取 js 和 css 对于调试非常有用。

于 2013-10-11T18:00:51.333 回答