Rails 3アプリを更新してRails 3.1を使用していて、その一部として新しいアセットパイプラインを使用しています。これまでのところ、私は解決できない厄介な問題とは別のものをすべて手に入れました。サブURIにデプロイするときにRails 3.1のプリコンパイルされた資産が壊れた
アプリケーションとそのすべてのアセットは開発には問題ありませんが、運用時にはPassenger(http://the-host/sub-uri/
)を使用してサブURIにデプロイされます。この問題は、アセットがデプロイ時に事前にコンパイルされており、CSSのファイル(.css.scss
ファイル)の1つがsass-rails
宝石のimage-url
ヘルパーを使用していることが問題です。私の.css.scss
ファイルで
:事前コンパイルプロセスの間に、パスがプリコンパイルされたCSSファイルにハードコーディングされているので、サブURIはのアカウントを取られていない
body { background-image: image-url("bg.png"); }
結果を中それが正常に動作させるためにどうあるべきか
body { background-image: url(/assets/bg.png); }
:
body { background-image: url(/sub-uri/assets/bg.png); }
ファイルをコンパイル
このシナリオはあまりにも多くのことを求めていますか?もしそうなら、私は古い非資産パイプラインの方法に戻って、public
から自分の画像とCSSを提供しなければならないでしょう。しかし、それは考えられて解決すべきであった何かのように思えます...?解決策が見当たりませんか?
編集1:は、私は1つが期待するようerb solutionを使用する代わりに、同じ結果が得られることに注意してください。
編集2:ブノワ・ギャレットさんのコメント
に応じていいえ、問題がconfig.assets.prefix
とは関係ありません。私はそれを設定しようとしました(/assets
のデフォルトではなく、になっています)、間違ったことが判明しました。この設定はすでにRailsアプリのルートであってサーバーではないようです。それを削除してデフォルトに戻すと、原因となった奇妙な問題がすべて修正されました(そして、多くの資産がすべて/sub-uri/sub-uri/assets
になりました - それはすべて非常に奇妙でした)。唯一の問題は、image-url
のヘルパーと友人が、事前コンパイル時にサブURIを取得しないことです。言うまでもなく、これはあらかじめコンパイルされているので、Passengerで実行されているときにはこのように設定されることを知ることができないため、論理的です。私の質問は、これを通知して、プリコンパイルされた結果の正しいパスになる方法です。確かにそれができる場合。
現時点での回避策は、CSSのiamgeをurl(../images/bg.png)
のように参照して、パイプライン化されていないpublic/images
の場所に配置することです。フィンガープリンティングやパイプラインが提供するすべてのメリットがないため、ほとんど理想的ではありません。
これを試しましたか? http://stackoverflow.com/questions/7295744/how-to-deploy-rails-3-1-app-in-a-subdirectory –
アプリ自体はうまく配置されています(RailsBaseURIメソッドは乗客のように使用します) docsが推奨します)。 'image_tag'などを使ったイメージのように、実行中のアプリケーションからリンクされているすべてのアセットは問題ありません。唯一の問題は、CSS内から参照される画像です。資産の事前コンパイル時にサブURIについてはわかりません。それがあれば解決策が必要なのです。 –
あなたの問題は、 'image-uri'ヘルパーが' config.assets.prefix'を拾わないということですか? –