我正在尝试部署包含jQuery Mobile的Rails 3应用程序。它在开发中工作正常,我知道它需要预编译JS和CSS进行生产。我收到以下错误:
Started GET "/orders/mobile" for 127.0.0.1 at Wed Jun 06 14:22:40 -0400 2012
Processing by OrdersController#mobile as HTML
Rendered orders/mobile.html.erb within layouts/mobile (642.9ms)
Completed 500 Internal Server Error in 1122ms
ActionView::Template::Error (jquery.mobile isn't precompiled):
5: <head>
6: <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
7: <title>Company Orders</title>
8: <%= stylesheet_link_tag 'jquery.mobile' %>
9: <%= stylesheet_link_tag 'jquery.mobile.structure' %>
10: <%= stylesheet_link_tag 'jquery.mobile.theme' %>
11: <%= stylesheet_link_tag 'http://fonts.googleapis.com/css?family=Ubuntu' %>
app/views/layouts/mobile.html.erb:8:in `_app_views_layouts_mobile_html_erb__605278794_69818059003840'
app/controllers/orders_controller.rb:330:in `mobile'
app/controllers/orders_controller.rb:329:in `mobile'
我已经阅读了usual的内容,但这里有很多错误,我几乎不知道从哪里开始:
*= require_tree ../../../vendor/assets/stylesheets
。我真的不希望它包含在每个页面中,所以我想将它包含在布局中,但我只是想以某种方式预编译它。*= require jquery.mobile[[.css].erb]
。config.assets.precompile += %w( [[./]vendor/assets/stylesheets/]jquery.mobile.* )
。作为最后的努力,我从jquery.mobile.css.erb中删除了“.erb”,并删除了<% asset_data_uri %>
标记以查看它是否可以编译。它传递了rake assets:precompile
命令,但仍然给了我同样的错误。
我不想关闭JQM的预编译;我希望它起作用。 (我真的需要加快这个页面的速度。)但是,我找不到任何关于如何将JQM优雅地插入到Rails 3应用程序(预编译)中的指南,并且我已经用尽了我在试用中可以想到的每个方法和错误。当然有人已经这样做了,并且知道正确的方法。
答案 0 :(得分:0)
我的基本问题是我需要为生产预编译一些资产,但不包含在每个页面中。这就是我的想法:
如果我不介意为每个页面提供JQM,我可以将文件放在app / assets中,让require_tree .
发挥其魔力,或将这些文件保留在供应商/资产中,{{1它们分别在application.js中。如果我想将它们放在供应商/资产中而不是在application.js中特别要求它们,我可以在production.rb中使用require
,在application.js中显然会config.assets.paths << "#{Rails.root}/vendor/assets"
处理这个树同样。这仍然会将它们卷入已编译的应用程序JS“ball”中,但在文件系统上将它们区分开来。
将jQuery Mobile合并到特定页面的正确方法 - 并将其文件分开保存在供应商/资产中 - 似乎是同时使用require_tree
指令和 config.assets.paths << "#{Rails.root}/vendor/assets"
指令。这将获得预编译的JQM文件,但不会卷入application-(hash).js和application-(hash).css。 (它们将是公共/资产中的单个文件。)然后,您可以在专门针对移动视图的布局中执行特定的config.assets.precompile += %w( jquery.mobile.* )
和javascript_include_tag
。
大结局:我已升级到Rails 3.2.5,因为我在3.2.3上看到了一些安全报告。我回到3.2.3并且 - 结合我上面学到的东西 - 我终于能够让它工作了。我也试过3.2.4。显然,&gt;中存在回归。 3.2.3干扰预编译。