0

jQueryMobileを含むRails3アプリをデプロイしようとしています。開発では問題なく動作し、本番環境では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'

私はいつものことを読みましたが、ここには多くの間違いがあり、どこから始めればよいのかほとんどわかりません。

  1. アプリ/アセットにJQMのものがありましたが、その後ベンダー/アセットに移動しました。それらはプリコンパイラーによって認識されます-さまざまな試行でそれらについて文句を言うので私は知っています-しかしそれらは(どちらの場所でも)プリコンパイルされることは決してないようです。
  2. 私は*= require_tree ../../../vendor/assets/stylesheetsapplication.cssで試しました。すべてのページヒットに含めたくないので、レイアウトに含めたいのですが、どういうわけかプリコンパイルしようとしています。
  3. 私は*= require jquery.mobile[[.css].erb]application.cssで試しました。
  4. config.assets.precompile += %w( [[./]vendor/assets/stylesheets/]jquery.mobile.* )config / environment/production.rbで試しました。

最後の努力として、jquery.mobile.css.erbから「.erb」を削除し、<% asset_data_uri %>タグを削除してコンパイルされるかどうかを確認しました。rake assets:precompileコマンドを渡しますが、それでも同じエラーが発生します。

JQMのプリコンパイルをオフにしたくありません。動作させたい。(私は本当にこのページをスピードアップする必要があります。)しかし、JQMをRails 3アプリ(プリコンパイル付き)にエレガントに挿入する方法についてのガイドが見つかりません。試行錯誤で考えられるすべての手段を使い果たしました。とエラー。確かに誰かがこれを行い、それを実行する正しい方法を知っています。

4

1 に答える 1

0

ここでの私の根本的な問題は、本番用にいくつかのアセットをプリコンパイルする必要があることですが、すべてのページヒットに含まれているわけではありません。これが私が理解したことです:

JQMがすべてのページで提供されることを気にしない場合は、ファイルをアプリ/アセットに入れrequire_tree .て魔法をかけるか、それらのファイルをベンダー/アセットに残して、require個別にapplication.jsに残すことができます。それらをベンダー/アセットに配置し、application.jsで特に必要としない場合はconfig.assets.paths << "#{Rails.root}/vendor/assets"、production.rbで使用でき、(明らかに)require_treeapplication.jsでもこのツリーを処理します。これにより、コンパイルされたアプリケーションJS "ball"にロールアップされますが、ファイルシステム上では区別されたままになります。

特定のページにjQueryMobileを組み込み、そのファイルをベンダー/アセットに分けておく適切な方法は、ディレクティブディレクティブの両方を使用することのようです。これにより、JQMファイルがプリコンパイルされますが、application-(hash).jsおよびapplication-(hash).cssにロールアップされません。(これらはパブリック/アセット内の個別のファイルになります。)次に、モバイルビュー専用のレイアウトで特定の'および'を実行できます。config.assets.paths << "#{Rails.root}/vendor/assets"config.assets.precompile += %w( jquery.mobile.* )javascript_include_tagstylesheet_link_tag

大きな仕上げ:3.2.3でセキュリティレポートを見たので、Rails3.2.5にアップグレードしました。3.2.3にロールバックし、上記で学んだことを取り入れて、ようやく機能させることができました。3.2.4も試してみました。どうやら>3.2.3には、プリコンパイルを妨げるリグレッションがあります。

于 2012-06-07T18:04:31.843 に答える