私は立ち往生しています!xD Railsプロジェクトに取り組んでいますが、相対パスを使用してアセットにアクセスできません。私の友人は、コントローラーとモデルを処理している間、html/css側で作業しています。私の友人は最近、次のように構造化されたファイルのバッチを私にくれました。
app/assets/images/*.jpg
app/assets/stylesheets/*.css
app/assets/javascripts/*.js
app/assets/fonts/*.* (+some more css files in here)
app / views / layoutsディレクトリ内に、Webアプリケーション全体で使用されるfinal.html.erbという名前のレイアウトがあります。また、final_page.html.erbという名前のapp / views / pagesにこのレイアウトでレンダリングしようとしている1ページ(html本文コンテンツ)があります...ページをロードするために必要なルーティングが設定されています。ただし、final_page.html.erbのコンテキストのみが読み込まれます(画像、スタイル、フォントは読み込まれません)。コンソールに移動して「railsserver」と入力し、localhost:3000にアクセスすると、ページが表示されます...裸の笑。コンソールは以下を出力します。
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のほとんどを書いていて、彼はレールを使った経験がありません。次のようにアセットのリクエストを変更することにしました。
から:
<link rel="stylesheet" type="text/css" href="../../assets/stylesheets/style.css">
に:
<%= stylesheet_link_tag "application.css" %>
から:
<script src="../../assets/javascripts/modernizr.js" type="text/javascript"></script>
に:
<%= javascript_include_tag "application.js" %>
から:
<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の外でも起動しますが、WebアプリケーションでRailsを操作するにはサイトが必要です。アドバイスをいただければ幸いです。このすべてを読むために忍耐を持っていただきありがとうございます。
PS私はRuby1.9.3とRails3.2.6を使用しています