6

막혔습니다! xD 레일스 프로젝트를 진행하면서 상대 경로를 사용하여 자산에 액세스하는 데 문제가 있습니다. 컨트롤러와 모델을 처리하는 동안 내 친구가 html/CSS 측면에서 작업하고 있습니다. 내 전체 웹 애플리케이션에 사용되는 레이아웃 이름 final.html.erb을 가지고, 내 app/views/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/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의 대부분을 썼고, 그는 레일 작업 경험이 0입니다. 에서

<%= 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"> 

사람 : 보낸 사람 : 23,516,

<%= image_tag "mainImg.jpg" %> 

이 다소 이미지의 부하로, 도움, 그리고 스타일의 아주 작은을 통해 제공; 그러나 그것은 그것이 보이는 것처럼 보이는 것과는 거리가 있습니다. ...

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

내가 URL과 등 (<퍼센트 = asset_path 'bg.jpg'%를>)이 교체 시도했다 : 나는 CSS 파일 자체 내에서 내 친구가 상대 호출을하기 때문에 그것의 생각 해요 하지만 아무런 효과가 없습니다. 나는 많은 것을 시도했고, 많은 게시물을 읽었습니다. Rails가 상대 경로를 사용할 수있는 방법이 있는지 궁금합니다. 나는 시도했다 :

config.assets.enabled = false 

그러나 그것은 도움이되지 않는다. .. 제발 나는 무엇을 잘못하고 있냐? 나는 친구가 자신의 일에 상대 경로를 사용하는 것을 멈추고 싶어한다고 생각하지 않는다.이 사이트는 Rails 외부에서 잘 작동하지만, 나는 webapp을 위해 Rails와 함께 작업해야한다. 모든 조언을 크게 주시면 감사하겠습니다. 이 모든 것을 읽으면서 인내심을 가져 주셔서 감사합니다.

P. Ruby 1.9.3 및 Rails 3.2.6을 사용하고 있습니다.

답변

6

/assets/style.css이 아닌 /assets/stylesheets/style.css 등을 사용해보십시오.

같은 구조가있는 경우 :

app 
    assets 
    stylesheets 
    javascripts 

그런 다음 app/assets에있는 파일에 접근하거나 app/assets/any_folder 당신이 경로 /assets/file를 사용해야은.

업데이트 여기

시도 :

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

레일 3.1 도입 된 새로운 자산 파이프 라인. http://guides.rubyonrails.org/asset_pipeline.html 당신의 응용 프로그램/뷰/레이아웃/application.html.erb 파일에서

, 당신이 있는지 확인 : 나는 당신이이 이상 읽고 추천 할 것입니다의 앱/자산에서

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

/스타일 시트/application.css 파일이 라인을 가지고 있는지 확인 :

*= require_tree . 

(이 보장됩니다 당신이 응용 프로그램/자산/STYL에 가지고있는 CSS 파일 디렉토리가 CSS 파일에

) 응용 프로그램을 사용할 수 esheets 당신은이 앱/자산/이미지 디렉토리에 이미지를 참조 할 수 있습니다 :

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

다른 디렉토리의 글꼴은 어떻게됩니까? –

+0

글꼴의 경우이 줄을 config/application.rb에 추가해야한다고 생각합니다. config.assets.paths << Rails.root.join ("app", "assets", "fonts") – calasyr