2012-07-29 16 views
6

Utknąłem! xD Pracowałem nad projektem Rails i mam problemy z dostępem do zasobów przy użyciu względnych ścieżek. Mój znajomy pracuje nad stroną html/css, podczas gdy ja zajmuję się kontrolerami i modelami. Niedawno mój przyjaciel dał mi paczkę plików uporządkowanych w następujący sposób:ścieżki względne dostępu do zasobów szyn

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

ciągu mojego katalogu app/views/układy, mam układ o nazwie final.html.erb który jest używany dla całej mojej webapp. Mam również 1 stronę (zawartość treści HTML), którą próbuję renderować za pomocą tego layoutu w app/views/pages o nazwie final_page.html.erb ... konieczne jest uruchomienie routingu strony; jednak ładuje tylko kontekst strony final_page.html.erb (bez obrazów, stylów ani czcionek). Kiedy wchodzę na konsolę i wpisuję "serwer szyny" i odwiedzam localhost: 3000, strona pokazuje ... nagiego lola. Konsola wyprowadza następujące:


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) 

Myślę, że problemem jest to, że staram się uzyskać dostęp do plików za pomocą ścieżek względnych. Mój plik układ wygląda następująco:

<!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> 

Również w ciele moim final_page.html.erb pliku, próbie uzyskania dostępu do obrazów przy użyciu ścieżek względnych, jak również ... tak:

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

Mój znajomy napisał większość tego html i ma 0 doświadczenia w pracy z szynami. Postanowiłem zmienić żądania aktywów tak:

Od:

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

Do:

<%= stylesheet_link_tag "application.css" %> 

Od:

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

do:

<%= javascript_include_tag "application.js" %> 

Od:

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

Do:

<%= image_tag "mainImg.jpg" %> 

Ten nieco pomaga, jak załadować zdjęcia, i bardzo mało stylizacji przychodzi poprzez; jest jednak daleko od tego, jak powinien wyglądać. Myślę, że to dlatego, że mój przyjaciel dzwoni względnych w obrębie samych plików css:

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

próbowałam zastępując je z adresu URL (<% = asset_path 'bg.jpg' %>) etc ... ale nie ma to żadnego wpływu. Próbowałem wielu rzeczy i czytałem tak wiele postów. Zastanawiam się, czy istnieje sposób, że Railsy pozwolą mi używać względnych ścieżek. Próbowałem:

config.assets.enabled = false 

ale to nie pomaga ... proszę ... co robię źle? Nie sądzę, że mój przyjaciel będzie chciał przestać używać względnych ścieżek do swojej pracy, tak jak on to robi.Strona uruchamia się poza Railsami, ale potrzebuję jej do pracy z Railsami dla mojej aplikacji internetowej. Każda rada byłaby bardzo doceniana. Dziękuję za cierpliwość za przeczytanie tego wszystkiego.

P.S. Używam Ruby 1.9.3 i Rails 3.2.6

Odpowiedz

6

Spróbuj użyć /assets/style.css nie /assets/stylesheets/style.css i tak dalej.

Jeśli istnieje taka struktura:

app 
    assets 
    stylesheets 
    javascripts 

Następnie, aby uzyskać dostęp do plików w app/assets lub w app/assets/any_folder należy użyć ścieżki /assets/file.

Updated

Tutaj spróbować:

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

Lub:

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

To rzeczywiście rozwiązał 50% problem xD wielkie dzięki! Jednak stylizacja jest nadal wyłączona. Nie jestem pewien, czy to dlatego, że pliki css używają ścieżek względnych, czy? :(Czy będę musiał przejść do plików css i zmienić ścieżki do obrazów, do których się odnosi? body { background-image: url (../ images/bg.jpg); background-repeat: repeat ; } Od adresu url (../ images/bg.jpg) do adresu URL (/assets/bg.jpg)? – Orlin

+0

Moje słowo ... które działało w 100% ... Użyłem adresu URL (/ assets/bg.jpg) ustalić dla wszystkich odniesień obraz w plikach cSS i to załatwiło sprawę !!! Thank you so so so much! – Orlin

+1

Tak. Dziękuję :) – Orlin

4

Rails 3.1 wprowadza nową Pipeline aktywów. Polecam zapoznanie się nad tym: http://guides.rubyonrails.org/asset_pipeline.html

w aplikacji poglądów/układów/pliku/application.html.erb, upewnij się, że masz to:

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

w aplikacji/aktywa/stylów/application.css plików, upewnij się, że ten wiersz:

*= require_tree . 

(zapewni to, że wszelkie pliki css, które masz w app/assets/Styl esheets katalogu będą dostępne dla aplikacji)

w pliku css można po prostu zrobić to odwołać obrazów w katalogu app/assets/images:

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

Co o czcionkach w innym katalogu? –

+0

dla czcionek, myślę, że trzeba dodać tę linię do config/environment.rb: config.assets.paths << Rails.root.join („aplikacja”, „aktywa”, „czcionki”) – calasyr

Powiązane problemy