6

私は立ち往生しています!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を使用しています

4

3 に答える 3

7

/assets/style.cssnotなどを使用してみてください/assets/stylesheets/style.css

そのような構造がある場合:

app
  assets
    stylesheets
    javascripts

app/assets次に、または内のファイルにアクセスするにapp/assets/any_folderは、pathを使用する必要があります/assets/file

更新しました

ここで試してみてください:

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

または:

body {
    background-image: url(/assets/bg.jpg);
    background-repeat: repeat;
}
于 2012-07-29T06:09:00.917 に答える
4

Rails 3.1は、新しいアセットパイプラインを導入しました。これを読むことをお勧めします:http://guides.rubyonrails.org/asset_pipeline.html

app / views / layouts / application.html.erbファイルで、次のことを確認してください。

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

app / Assets / stylesheets / application.cssファイルに、次の行があることを確認してください。

*= require_tree .

(これにより、app / Assets / stylesheetsディレクトリにあるcssファイルがアプリケーションで利用できるようになります)

cssファイルでは、これを実行して、app / Assets/imagesディレクトリ内の画像を参照できます。

background-image: url(bg.jpg);
于 2012-07-29T06:40:16.227 に答える
0

構成でローカルリソースを使用するinitializers必要があり、次のフォルダー構造がある場合:

app assets stylesheets javascripts

あなたがしなければならないのは:(このサンプルではSpreebaseconfig / initializerを使用しています)

Spree.config do |config| config.admin_interface_logo = '/assets/logo/custom_admin.png' config.logo = '/assets/logo/custom_store.jpg' end

だから使用/assets/your_file_or_pathして、それは動作します:D

于 2018-06-20T02:26:01.640 に答える