6

私は塞がっています! xD私はRailsプロジェクトで作業していましたが、相対パスを使用してアセットにアクセスする際に問題があります。私のコントローラはコントローラとモデルを扱っている間、私の友人が物事のhtml/css側で作業しています。私は私の全体のWebアプリケーションのために使用されているレイアウトの名前final.html.erbを持って、私のアプリ/ビュー/ layoutsディレクトリ内レールにアクセスするための相対パスアセット

app/assets/images/*.jpg 
app/assets/stylesheets/*.css 
app/assets/javascripts/*.js 
app/assets/fonts/*.* (+some more css files in here) 

:私の友人は最近私に次のように構造化ファイルのバッチを与えました。私はまた、1ページ(HTMLの本文コンテンツ)を持っていますが、このレイアウトでapp/views/pagesという名前のfinal_page.html.erbをレンダリングしようとしています...ページがロードされるのに必要なルーティングがあります。ただし、final_page.html.erb(イメージ、スタイリング、またはフォントはありません)のコンテキストのみを読み込みます。私がコンソールにアクセスして "rails server"と入力してlocalhost:3000にアクセスすると、ページが表示されます... naked lol。コンソールには、次のように出力します


Started GET "/" for 127.0.0.1 at 2012-07-28 21:15:02 -0700 
Connecting to database specified by database.yml 
Processing by PagesController#final_page as HTML 
    Rendered pages/final_page.html.erb within layouts/final (8.4ms) 
Completed 200 OK in 82ms (Views: 81.0ms | ActiveRecord: 0.0ms) 


Started GET "/assets/stylesheets/style.css" for 127.0.0.1 at 2012-07-28 21:15:04 -0700 

ActionController::RoutingError (No route matches [GET] "/assets/stylesheets/style.css"): 
    actionpack (3.2.6) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call' 
    actionpack (3.2.6) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call' 
    railties (3.2.6) lib/rails/rack/logger.rb:26:in `call_app' 
    railties (3.2.6) lib/rails/rack/logger.rb:16:in `call' 
    actionpack (3.2.6) lib/action_dispatch/middleware/request_id.rb:22:in `call' 
    rack (1.4.1) lib/rack/methodoverride.rb:21:in `call' 
    rack (1.4.1) lib/rack/runtime.rb:17:in `call' 
    activesupport (3.2.6) lib/active_support/cache/strategy/local_cache.rb:72:in `call' 
    rack (1.4.1) lib/rack/lock.rb:15:in `call' 
    actionpack (3.2.6) lib/action_dispatch/middleware/static.rb:62:in `call' 
    railties (3.2.6) lib/rails/engine.rb:479:in `call' 
    railties (3.2.6) lib/rails/application.rb:220:in `call' 
    rack (1.4.1) lib/rack/content_length.rb:14:in `call' 
    railties (3.2.6) lib/rails/rack/log_tailer.rb:17:in `call' 
    rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service' 
    /usr/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service' 
    /usr/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run' 
    /usr/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread' 


    Rendered /var/lib/gems/1.9.1/gems/actionpack-3.2.6/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (2.0ms) 

私は、問題は、私は相対パスを使用してファイルにアクセスしようとしているということだと思います。私のレイアウトファイルは、次のようになります。また

<!doctype html> 
<html class="no-js"> 
<head> 
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width,initial-scale=1"> 
<meta name="viewport" content="width=device-width"> 
<title>:: Final ::</title> 
<link rel="stylesheet" type="text/css" href="../../assets/stylesheets/style.css"> 
<link href="../../assets/stylesheets/desktop.css" rel="stylesheet" type="text/css" media="only screen and (min-width:769px) and (max-width:1000px)"> 
<script src="../../assets/javascripts/modernizr.js" type="text/javascript"></script> 
</head> 
<body> 
    <%= yield %> 
</body> 
</html> 

、私final_page.html.erbファイルの本体内に、私はそうのような...だけでなく相対パスを使用して画像にアクセスしよう:

<img src="../../assets/images/mainImg.jpg" alt="img"> 

私の友人はこのhtmlのほとんどを書きました。彼はレールで作業している経験がありません。

<%= stylesheet_link_tag "application.css" %> 

<script src="../../assets/javascripts/modernizr.js" type="text/javascript"></script> 

へ:

<link rel="stylesheet" type="text/css" href="../../assets/stylesheets/style.css"> 

へ:

から

<%= javascript_include_tag "application.js" %> 
01私はそうのような資産に対する要求を変更することを決めました

<img src="../../assets/images/mainImg.jpg" alt="img"> 

へ:

<%= image_tag "mainImg.jpg" %> 

この多少画像の負荷として、支援し、スタイリングのはほとんど伝わってきます。しかし、それはそのように見えるものから離れている。私は私の友人は、CSS内の相対的な呼び出しはファイル自体を作るからだと考えている:

body { 
    background-image: url(../images/bg.jpg); 
    background-repeat: repeat; 
} 

私は、URL(<% = asset_path「bg.jpg」%>)等... でこれらを交換しようとしましたそれは効果がありません。私は非常に多くのことを試み、非常に多くの記事を読んできました。私は、Railsが私に相対パスを使用させる方法があるのだろうかと思っています。私は試しました:

config.assets.enabled = false 

しかし、それは助けにはなりません...私は間違っていますか?私は友人が自分の仕事のために相対的な道を使うのをやめたいと思っているとは思わない。サイトはRailsの外ではうまくいきますが、私はRailsでwebappのために動作する必要があります。アドバイスをいただければ幸いです。このすべてを読んでいただき、ありがとうございました。

P.S. Ruby 1.9.3、Rails 3.2.6を使用しています

答えて

6

/assets/style.cssではなく/assets/stylesheets/style.cssなどを使用してください。

ような構造がある場合:

app 
    assets 
    stylesheets 
    javascripts 

次にapp/assetsにしたり、パス/assets/fileを使用する必要がありますapp/assets/any_folder内のファイルへのアクセス権を取得します。ここで

を更新しました

は試してみてください。

body { 
    background-image: url(bg.jpg); 
    background-repeat: repeat; 
} 

または:

body { 
    background-image: url(/assets/bg.jpg); 
    background-repeat: repeat; 
} 
+0

これは実際の50%を解決しました問題xDおかげでたくさん!しかし、スタイリングはまだオフです。私はそれがcssファイルが相対パスを使用しているかどうかわからないですか?私はcssファイルに入り、参照する画像のパスを変更する必要がありますか? body { background-image:url(../ images/bg.jpg); background-repeat:repeat ; } url(../ images/bg.jpg)からurl(/assets/bg.jpg)まで – Orlin

+0

ああ私の言葉は... 100%働いた...私はURL(/ assets/bg.jpg)cssファイル内のすべての画像参照を修正してトリックをしました!!!ありがとうございました – Orlin

+1

ありがとうございました:) – Orlin

4

のRailsを3.1新しいアセットパイプラインを導入しました。私はあなたがこの上で読んで推薦:http://guides.rubyonrails.org/asset_pipeline.html

あなたのアプリ/ビュー/レイアウト/ application.html.erbファイルでは、あなたがこれを持っていることを確認してください。

<%= stylesheet_link_tag "application", :media => "all" %> 

をあなたのアプリ/資産で/スタイルシート/ application.cssファイル、あなたはこのラインを持っていることを確認してください。

*= require_tree . 

(これはアプリ/資産/ STYLに持っているすべてのCSSファイルを保証しますesheetsディレクトリには、あなたは自分のアプリ/資産/画像内のディレクトリを画像を参照するためにこれを行うことができ、あなたのCSSファイルで

)アプリケーションに利用できるようになります:

background-image: url(bg.jpg); 
+1

別のディレクトリにあるフォントはどうですか? –

+0

フォントについては、この行をconfig/application.rbに追加する必要があると思います。 config.assets.paths << Rails.root.join( "app"、 "assets"、 "fonts") – calasyr

関連する問題