2013-10-19 10 views
11

私は最近、Rails 4を使うためにRails 3.2.13アプリケーションの1つを書き直しました。私はRails 3アプリケーションでtwitter-bootstrap-rails 2.1.2を使用しました。 Rails 4のバージョンを書き直したところ、バージョン2.2.8を使い始めました。私はPhusion Passenger 4.0.20を自分の開発サーバーと運用サーバーで使用して、すべてのRailsアプリケーションをホストしています。Rails 4 - バックグラウンドイメージはLocalhostに現れますが、生産現場にはありません

私のRails 3アプリケーションでは、バックグラウンドイメージがローカルホストとプロダクションで正しく表示されていました。しかし、Rails 4と現在のバージョンのtwitter-bootstrap-railsを使ってアプリケーションを書き直したところ、バックグラウンドイメージは正しく表示されていましたが、プロダクションで展開すると背景イメージは表示されません。

私は次のCSSを試しましたが、背景イメージはlocalhostにしか表示されません。最初のステートメントは、ローカルホストとプロダクションのRails 3アプリケーションでうまく機能していたオリジナルのCSSコードです。ここで

background: url(/assets/landingpage2.jpg); width: 574px; height: 650px; 

background: url(../assets/landingpage2.jpg); width: 574px; height: 650px; 

background-image: url(../assets/landingpage2.jpg); width: 574px; height: 650px; 

background-image: url("../assets/landingpage2.jpg"); width: 574px; height: 650px; 

background-image: url("/assets/landingpage2.jpg"); width: 574px; height: 650px; 

はもともと働いていた背景の文が含まれたクラスである:ここでは

.landing-cube-menu { 
    font-weight: bold; 
    font-size: 150%; 
    line-height: 100%;  
    background: url(/assets/landingpage2.jpg); width: 574px; height: 650px; 
    margin:0 auto; 
} 

は私が私の見解で使用していたコードです:

<div class="header-cube-menu" style="position: relative;"> 

    <div class="header-store" style="position: absolute;"> 
    <p><%= link_to "Online Store", store_path %></p> 
    </div> 

    <div class="header-about" style="position: absolute;"> 
    <p><%= link_to "About", about_path %></p> 
    </div> 

    <div class="header-contact" style="position: absolute;"> 
    <p><%= link_to "Contact", contact_path %></p> 
    </div> 

    <div class="header-verse" style="position: absolute;"> 
    <p><a href="/verse">Bible<br>Verse</a></p> 
    </div> 

    <div class="header-app" style="position: absolute;"> 
    <p><a href="/app">Mobile<br>&nbsp;&nbsp;App</a></p> 
    </div> 

    <div class="header-home" style="position: absolute;"> 
    <p><a href="/home">Home<br>&nbsp;Page</a></p> 
    </div> 

    <div class="header-math" style="position: absolute;"> 
    <p><a href="/math">The<br>Math</a></p> 
    </div> 

    <div class="header-vision" style="position: absolute;"> 
    <p><a href="/vision">&nbsp;Vision<br>Mission</a></p> 
    </div> 

    <div class="header-pendant" style="position: absolute;"> 
    <p><a href="/pendant">Pendant<br>&nbsp;&nbsp;&nbsp;Desk Cross<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and more</a></p> 
    </div> 

    <div class="header-puzzle" style="position: absolute;"> 
    <p><a href="/puzzle">3D-Puzzle<br>&nbsp;&nbsp;eBook</a></p> 
    </div> 

</div> 

私がクリアしましたローカルホストと私のドメインの両方に対して、私のブラウザでキャッシュします。私はまだローカルホストではなく、ドメインでイメージを参照してください。私はMac Mini ServerでSafari、Chrome、Firefox、Operaの最新バージョンを使用しようとしました。それらのすべてが同じ結果を得る。

ローカルホストで背景イメージが表示されていない場合は、これを理解できます。私はlocalhostを使ってRails 4アプリケーションのテストを行い、それが本番環境で動作することを前提としていました。しかし、私はそれを展開した後、背景画像が欠落していた。これは私の本番サーバーと開発サーバーの両方で起こっています。画像ファイルは両方のサーバーのapp/assets/imagesにあります。

ここに投稿したオリジナルコードとすべての例は、画像がローカルホストに表示されるので正しいです。私はこの時点でどこをチェックするのか分からない。私はPassenger Google Groupにこれを掲載するかもしれません。これはローカルホストとプロダクションの間の唯一の他の変数です。特に私の開発サーバーを考慮してください。

更新:私はこれを投稿した後、他の可能性を試すことにしました。現在、localhostに対してバックグラウンドイメージが表示されなくなりました。私はこれに完全に迷っています。

ご協力いただければ幸いです。

UPDATE 2013年10月19日20:05 CDT GMT-5

私は私の.lessファイル内asset_urlソリューションを実装しようとしました。ここで私はすくい資産をやったときに私が得たエラーは以下のとおりです。プリコンパイルRAILS_ENV =生産コマンド

I, [2013-10-19T19:59:05.384878 #69440] INFO -- : Writing /Users/myusername/Sites/myrailsapp/public/assets/application-f8821f5601f793a09e9373fb397df1b1.js 
    rake aborted! 
    undefined method `[]' for nil:NilClass 
     (in /Users/myusername/Sites/hypercubeoflove_RoR_4/app/assets/stylesheets/application.css) 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/sass_functions.rb:63:in `sprockets_context' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-rails-4.0.0/lib/sass/rails/helpers.rb:23:in `asset_url' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/script/funcall.rb:112:in `_perform' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/script/node.rb:40:in `perform' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:298:in `visit_prop' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:37:in `visit' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:100:in `visit' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:53:in `block in visit_children' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:53:in `map' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:53:in `visit_children' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:109:in `block in visit_children' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:121:in `with_environment' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:108:in `visit_children' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:37:in `block in visit' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:320:in `visit_rule' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:37:in `visit' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:100:in `visit' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:53:in `block in visit_children' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:53:in `map' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:53:in `visit_children' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:109:in `block in visit_children' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:121:in `with_environment' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:108:in `visit_children' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:37:in `block in visit' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:128:in `visit_root' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:37:in `visit' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:100:in `visit' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/visitors/perform.rb:7:in `visit' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/tree/root_node.rb:20:in `render' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/engine.rb:315:in `_render' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sass-3.2.12/lib/sass/engine.rb:262:in `render' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/sass_compressor.rb:24:in `evaluate' 
    /Users/myusername/.rvm/gems/[email protected]/gems/tilt-1.4.1/lib/tilt/template.rb:103:in `render' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/context.rb:197:in `block in evaluate' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/context.rb:194:in `each' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/context.rb:194:in `evaluate' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/bundled_asset.rb:25:in `initialize' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/base.rb:377:in `new' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/base.rb:377:in `build_asset' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/index.rb:94:in `block in build_asset' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/caching.rb:58:in `cache_asset' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/index.rb:93:in `build_asset' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/base.rb:287:in `find_asset' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/index.rb:61:in `find_asset' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/manifest.rb:211:in `block in find_asset' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/manifest.rb:257:in `benchmark' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/manifest.rb:210:in `find_asset' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/manifest.rb:119:in `block in compile' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/manifest.rb:118:in `each' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/sprockets/manifest.rb:118:in `compile' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-rails-2.0.0/lib/sprockets/rails/task.rb:60:in `block (3 levels) in define' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-2.10.0/lib/rake/sprocketstask.rb:146:in `with_logger' 
    /Users/myusername/.rvm/gems/[email protected]/gems/sprockets-rails-2.0.0/lib/sprockets/rails/task.rb:59:in `block (2 levels) in define' 
    /Users/myusername/.rvm/gems/[email protected]/bin/ruby_noexec_wrapper:14:in `eval' 
    /Users/myusername/.rvm/gems/[email protected]/bin/ruby_noexec_wrapper:14:in `<main>' 
    Tasks: TOP => assets:precompile 
    (See full trace by running task with --trace) 
+1

あなたが../assetsを削除した場合:良い測定のために、その後(私の場合のユニコーンに)あなたのWeb/HTTPサーバーを再起動しrake assets:precompile RAILS_ENV=production

:これらの線に沿って何かを実行する

男が言うように、最初に持っていた/ assetsに置き換え、サーバーを再起動して(キャッシュしている場合のみ)、ブラウザにキャッシュをダンプします。 – trh

+0

ブラウザをリセットしてキャッシュをクリアし、Mac Mini Serverを再起動しました。画像は表示されません。おそらく、私がlocalhostを実行していたとき、私はいつもキャッシュを持っていたでしょう。今私はちょうどこの時点で背景画像を全く見ない。 –

+1

ダイジェストを使用してアセットをコンパイルしていますか? 「はい」の場合は、「sprocket-rails」で問題が発生する可能性があります。 https://github.com/rails/sprockets-rails/issues/49 https://github.com/alexspeller/非愚かなダイジェスト資産 – swapab

答えて

23

ほぼ確実rake assets:precompile &本番環境

をどうすることとあなたの問題良いテストになります制作アプリのRight-Click > View Sourceに移動し、背景画像が呼び出されるCSSファイルをクリックします。あなたの問題がCSSでurl( "background-image。PNG」)&ファイル上にクリックしたとき、それは表示されませんが、解決策は、動的に


我々は問題を抱えていた

SCSSで資産をプリコンパイル資産をプリコンパイルするSCSSを使用することですCSSの画像ファイルにアクセスできない場合は、CSSが静的URL()の場所のみを参照していて、プリコンパイル時に画像が「backgroun-image-234234nsdfasfdjasdfk2jij234ij32i.png」と表示されていたためです。

これを修正する方法はですアセットへの動的リンクを作成します。

#application.css.scss (yes, you need to rename it) 
@import 'layout/body' 


#app/assets/stylesheets/layout/body.css.scss 
body { 
    background: asset_url('background-image.png') 
} 

あなたがこれを行うには、あなたが生産にプッシュする場合、その後、あなたはこれらのコマンドを実行した場合、それが動作するはずです::ここでは、などの画像への正しいパスを置くためにあなたのアプリはいくつかのライブのコードである可能

rake assets:precompile RAILS_ENV=production 
+0

宝石を使用すると、私のCSSコードはすべてbootstrap_and_overrides.css.lessにあります。私はapplication.cssを使用していません。バックグラウンドイメージを参照していて、bootstrap_and_overrides.css.lessに残りのコードを残しておいて、私がたくさんの低コードを持っている箇所について言及しているものだけを実装できますか? –

+0

.lessはRailsの "sprockets"コンパイラ(http://stackoverflow.com/questions/7341676/using-less-in-a-rails-3-1-app)でサポートされています。あなたの.lessファイルに "asset_url"のものを適用した結果 –

+0

私の.lessファイルにasset_urlソリューションを試みました。レーキ資産を実行したとき、環境なしでプリコンパイルすると、コマンドはエラーなしで実行されました。 rake資産を実行したとき:RAILS_ENV = production(環境を初めて取り込んだとき)をプリコンパイルすると、プロセスが中止した資産/画像内のすべてのイメージのための 'Writing'ステートメントが投稿されました。最後の 'Writing'文で始まるエラーログを追加しました。 –

10

FWIWは、私はちょうどそのstyleblah.css.scssstyleblah.cssから背景画像を参照background: asset_url('imagetitle.png');background: url('/assets/images/imagetitle.png');を変更したCSSファイルの名前を変更し、それが完全に働きました。 sudo service unicorn restart

+0

同じ問題がある、 prodction.rbファイルを置いてください。 config.assets.compileは本当ですか? –

+1

こんにちはごめんなさい - 私はレール4アプリのためのデフォルトのproduction.rb設定を変更しませんでした(マンドリルの設定を除いて)。 config.assets.compileはfalseに設定されています: 'config.assets.compile = false'。私の完全なproduction.rbファイルは、[Production.rb on Github](https://github.com/ryparty/productionrb/blob/master/production.rb)にあります。 .css.scssドキュメント内のパスをイメージの名前だけに変更し、イメージの配置場所を確認していますか?私も学んでいますが、なぜうまくいかないのか分かりません。 – user2398041

関連する問題