当我最近开始使用我的应用程序的移动版本时,我意识到我没有使用为桌面客户端编写的所有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中&gt;资产&gt; 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
导致此错误的原因是什么?如何解决?
答案 0 :(得分:0)
只需添加
config.assets.precompile += %w(mobile.js)
到config/application.rb
当您部署到生产环境时,默认情况下rails使用asset pipeline。
这意味着,不是直接提供assets/
中的文件,rails会假定您事先已经运行rake assets:precompile
,并且您的资产中存在连锁,压缩和缩小版本夹。
这意味着您打算从浏览器加载的每个资产都应该进行预编译。好处是,不是提供许多人类可读的文件,而是只提供一些已经缩小的文件 - 更少的连接,更少的体积=更快的加载时间。
此功能在开发模式下处于非活动状态,因为您必须在每个请求时重新编译资产,而且能够读取js和css对于调试非常有用。