2012-01-11 2 views
13

新しいRails 3.1アプリケーションのための最初のデプロイを行ったばかりですが、アセットが正しく動作していないようです。私はデプロイ時にすべてをあらかじめコンパイルしていますが、それはpublic/assetsのようになります。しかし、私のレイアウトでの例えばstylesheet_link_tag "application"の出力は/stylesheets/application.cssを指すhrefを持っています。これは明らかに機能しません。stylesheet_link_tagが本番環境の/ assetsにリンクされないのはなぜですか?

奇妙なことに、開発モードではすべてが正常であるようですが、それは期待通りの/assets/application.cssにリンクしています。

config/application.rbconfig/environments/production.rbのファイルをアセットパイプライン上にある別のアプリと比較しました。関連する設定は同じようです。

どこから見たらいいですか?

+1

あなたが開発に使用したすべてのCSSを生産マージのapplication.cssに確実に提供していますか?ファイルを開き、application.cssに欠けているスタイルがないか確認してください。 – naren

+0

これは存在しています。 –

答えて

14

ヘルパーは、このコードを生成します:パイプラインはあなたがしているどんなモードで有効にされていないため

/stylesheets/application.css 

これは、いくつかの理由があります。

  • 誤った設定ファイルでパイプラインが有効になっています。 (パイプラインはapplication.rb設定ファイルで有効にする必要があります)

  • これをapplication.rbで有効にし、別の場所で無効にしました。あなたが誤って

どこかrailtieをコメントアウトしている

  • は詳細についてはthis questionを参照してください。

    アップグレードされたアプリケーションの場合は、パイプラインガイドのlast sectionのすべての設定オプションをチェックして、すべて正しく設定されていることを確認してください。

  • +6

    ありがとう私を正しい方向に向ける。私はすべてのRails(mongodb-onlyアプリ)をrequire'ingしていなかったし、 'require"スプロケット/鉄道を欠いていた。なぜこれが開発において重要ではなかったのかまだ分かりません。 –

    +0

    これをどのように修正したかもっと教えてください。私は3.xからのアップグレード後も同じ問題が発生しています。 –

    +0

    私の場合、Rails 4.0では、ヘルパーに間違ったパスを与えていたという問題がありました。/stylesheetsの代わりにused/assetsを使用してください – redtree

    1

    production.rdでconfig.assets.compile = false(デフォルト)をtrueに設定し、そのアセットがdevelopemntで提供されていることを確認することをお勧めします。彼らは正確に提供していた場合、あなたは、ディレクトリ内の他のスタイルシートを含めている場合は、CSSファイル足場と改ページは、CSSファイルです

    /* 
    *= require scaffold 
    *= require pagination 
    *= require_self 
    *= require_tree. 
    */ 
    

    正しく持つように見るためにあなたのapplication.cssをチェックする必要があります。以下のようにconfig.assets.precompileフラグの下に記述します。

    config.assets.precompile + =%(pagination.cssのscaffold.css)W

    Iはapplication.js、application.css、およびすべての非JS/CSSがすでにある(その理由は、プリコンパイルの作品であると仮定追加されます)、additonalアセットをconfig.assets.precompileフラグに追加する必要があります。

    +0

    私はコンパイルをオンにしましたが、違いはありませんでした。私も 'config.assets.debug = true'を有効にしましたが、それでも何も変わりませんでした。 'public/assets/manifest.yml'ファイルが存在し、' application.css:application-642da156f9df61facf341073150aa860.css'というエントリがあり、そのファイルが存在します。 –

    +0

    開発モードでは、すべてがうまく動作し、config.assets.compile = trueに変更しても同じであるはずです。あなたのheirarchyの要点をapp/assetsディレクトリに投稿できますか? – naren

    -1

    資産はapp/assetsではないと思われましたが、私は間違っているかもしれませんが、public/assetsです。

    +2

    プロダクションでは、assetsはpublci/assetsディレクトリから提供されるので、アプリ/アセット(etc)からpublc/assetsに移動するにはアセットをプリコンパイルする必要があります – naren

    7

    これはレール3.1用であることはわかっていますが、レール4のユーザーは非常に似たエラーが発生する可能性があります。 ほとんどの原因は、その資産を本番環境のプリコンパイル・ディレクティブに追加していないためです。RBは、それは次のようになります。OPが言ったように

    # Precompile additional assets. 
    # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. 
    config.assets.precompile += %w() 
    

    、application.cssが追加されていなかったと症状は、URLが/スタイルシートまたは/ JavaScriptとない資産で始まりです。ですから解決策は

    config.assets.precompile += %w(your_assets.css your_assets.js) 
    
    関連する問題