0

のパイプライン経由でアセットを設定できません今月、私はRails 3.0からRails 3.1にアップグレードしました。今週はプロダクションモードでサーバを起動しようとしました。現地生産用レール3.1.3サーバ

私はない限り、私はスピードの理由から、私は明らかにドン私environment.rbのファイル」にconfig.assets.compile = trueを設定し、アセットパイプラインを経由して私の公共資産(JavaScriptとCSSを)まで提供するために私の本番環境のサーバーを取得することができませんやりたくない。

私は、1つまたは2つの異なるページで使用される傾向のある多数のJSファイルとCSSファイルを持っています。これは、それぞれのページが少し違うことを望むので、私の使い方に合わない単一の "マニフェスト"ファイルを作成することを意味します。私はまた、CSSのいくつかがうまく一緒に座っていないことを期待しています。それゆえ、私は、CSS/JSを大量に整理しようとしている "ちょうどそれを稼働させる"というアプローチをやめました。ここで

はproduction.rbファイルです:

Implicit::Application.configure do 
    ... 

    config.consider_all_requests_local  = false 
    config.action_controller.perform_caching = true 

    # I set this to true, as I am testing this locally, just running a local Thin server 
    config.serve_static_assets = true 

    config.assets.compress = true 

    # Setting this to false removes the issue - but is SLOW 
    config.assets.compile = true 

    config.assets.digest = true 

    # This is overkill - but does get EVERYTHING precompiled for now 
    config.assets.precompile += %w(*.css *.js) 

    config.action_dispatch.x_sendfile_header = nil 
    ... 
end 

これは私にとって非常に新しい分野である、と私はこれらのブール値を切り替える今日の多くを過ごした地元のシン/ Railsのサーバを起動/停止しましたそれらを試してみる。しかし、唯一の違いは、コンパイルフラグです。

私のapplication.rbファイルはかなり標準的で、その中にconfig.assets.enabled = trueconfig.assets.initialize_on_precompile = falseがあります。後者は英雄郵便(そして推測)からです。

私はそれであるが、プリコンパイルの正規表現「すべてをキャッチ」おそらく、それとは何かを私のやや古いノートパソコン(5年)上で実行するのに約20分かかりますbundle exec rake assets:precompileコマンドで作成されたフル装備public/assetsディレクトリを、持っていますコンパイルフラグがtrueに設定されていると、/tmp/cacheディレクトリにこれらのアセットのコピーが作成されているのがわかります。これは明らかにアプリケーションが作成した "コンパイル済みのコピー"です。資産。

コンパイルフラグをfalseに設定すると、ローカルに要求を設定しない限りログにエラーメッセージが表示され、レンダリングされたエラーページに表示されます。jquery.reveal isn't precompiledです。しかし、http://localhost:3000/assets/jquery.reveal.jsに行くと、javascriptファイルが提供されます。

これを引き起こして、私のアプリケーションのレイアウトの行は次のとおりです。私は変更せずにjquery.reveal.jsへのjquery.revealを変更しようとしている

<%= javascript_include_tag "application", "jquery.reveal" %> 

。それを削除すると、jquery.reveal機能がなくなったことを除いて、インデックスページが修正されます!したがって、application.jsが正しく提供されていることを明確に示しています。私は、jquery.revealがなぜpublic/assetsディレクトリのプリコンパイルされたファイルを見ることができるのか分かりません。

+0

パイプラインガイドの最後のセクションの設定オプションをすべて確認してください。それでも問題がない場合は、index.html.erbの内容とRailsヘルパーコールをアプリケーションに投稿してください.rb? –

+0

最初に投稿されたエラーメッセージは、期限切れの「実動」データベースを使用したもので、セキュリティコードから取得されました。新しいエラーを表示するために最後の2つの段落を更新しました - 私はjquery.revealが見つからないことに戻ります! – Phantomwhale

答えて

1

これは興味深い問題です。リンクしたバグと間違った名前にコンパイルされているバグの2つがあると思います。バグレポートを使って提出できる最小のテストケースを生成しようとする価値があります。

この問題を回避するには、問題を抱えている人はほとんどいないと思われます。マニフェストを使用することです(マニフェストを介してライブラリをリンクするのがベストプラクティスとなるようです)。

home.jsという名前のファイルを作成し、そのファイルを1つだけ必要とします。

これは全体的に悪い方法ではありません。これらの余分なマニフェストをプリコンパイル配列(ガイドを参照)に追加し、複数のライブラリを複数のページまたはセクションにわたって共有することができます。

+0

これは良い回避策のように見えますが、確かに自分のコードを取りたい段階に向かいます(プリコンパイルの配列は必須ですが、サードパーティのテンプレートからJS/CSSコードがたくさんあります)。まったく新しいプロジェクトでこの問題を再現したので、今日バグレポートにそれを試してみましょう。 – Phantomwhale

+0

レールgithubサイトhttps://github.com/rails/rails/issues/4535上の問題の問題を提起しました – Phantomwhale

+0

コンパイルフラグ= trueの場合、この問題が発生したようです。http: //stackoverflow.com/questions/7640808/assets-say-not-precompiled-when-they-are-precompiled/8921998 – Phantomwhale

1

https://github.com/rails/rails/(ここでは自分の質問に答えるが、それは、そのようなjquery.reveal

として「ピリオド」で問題レポートを資産を解析してバグかもしれないように見えますsprockets 2.0.3の直後に発生するコミット(https://github.com/sstephenson/sprockets/commit/4ba5b32764a9073671df5e77355df6ed2bb3d3c9)を強調表示します。これは、レール3.1.3が依存するデフォルトのバージョンです。したがって、Sprocketのアップグレードには3.2安定レールへの移行が必要です。

しかし、バグレポートでは、config.assets.compile = trueが発生していて、jquery.revealがjquery-8fuに動的にコンパイルされていることがわかりましたが、代わりに8g.reveal.js jquery.reveal-8fu ... 8g.jsの)

おそらくこれは答えではありません。少なくとも私はそうではないと思う。しかし、CSS/JSファイルを含む「非期間」は私が知る限り、上手く提供されているので、この期間の問題を見ていきます。

関連する問題