2012-07-29 27 views
6

Sono bloccato! xD Ho lavorato a un progetto Rails e sto riscontrando problemi nell'accedere alle mie risorse utilizzando percorsi relativi. Un mio amico sta lavorando sul lato html/css delle cose mentre sto gestendo i controller ei modelli. Il mio amico ha recentemente mi ha dato un batch di file strutturati nel seguente modo:percorsi relativi per l'accesso alle risorse di rotaie

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

All'interno della mia cartella app/views/layout, ho un layout con nome final.html.erb che viene utilizzato per tutta la mia webapp. Ho anche 1 pagina (contenuto del corpo HTML) che sto cercando di renderizzare con questo layout in app/views/pages named final_page.html.erb ... il routing necessario è a posto per il caricamento della pagina; tuttavia, carica solo il contesto di final_page.html.erb (nessuna immagine, stile o carattere). Quando vado alla console e scrivo "rails server" e visito localhost: 3000, la pagina si presenta ... lol nudo. La console emette il seguente:


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) 

penso che il problema è che sto cercando di accedere ai file utilizzando percorsi relativi. Il mio file di layout si presenta così:

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

Inoltre, all'interno del corpo del mio file final_page.html.erb, provo ad accedere alle immagini utilizzando i percorsi relativi, nonché ... in questo modo:

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

Il mio amico ha scritto la maggior parte di questo html e ha 0 esperienze con i binari. Ho deciso di cambiare le richieste di beni in questo modo:

Da:

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

A:

<%= stylesheet_link_tag "application.css" %> 

Da:

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

A:

<%= javascript_include_tag "application.js" %> 

Da:

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

A:

<%= image_tag "mainImg.jpg" %> 

questo un po 'aiuta, come il carico di immagini, e molto poco dello stile passa attraverso; tuttavia, è lontano da come dovrebbe essere. Sto pensando che sia perché il mio amico effettua le chiamate relative al loro interno i file di css:

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

ho provato sostituendo questi con url (<% = asset_path 'bg.jpg' %>) ecc ... ma non ha alcun effetto. Ho provato tante cose e ho letto così tanti post. Mi chiedo se c'è un modo in cui Rails mi permetterà di usare percorsi relativi. Ho provato:

config.assets.enabled = false 

ma questo non aiuta ... per favore ... cosa sto facendo di sbagliato? Non penso che il mio amico vorrà smettere di usare percorsi relativi per il suo lavoro, come è il modo in cui fa le cose.Il sito si attiva ben al di fuori di Rails, ma ho bisogno che funzioni con Rails per la mia webapp. Qualsiasi consiglio sarebbe molto apprezzato. Grazie per aver avuto la pazienza di leggere tutto questo.

P.S. Sto usando Ruby 1.9.3 e Rails 3.2.6

risposta

6

Prova a utilizzare /assets/style.css non /assets/stylesheets/style.css e così via.

Se non c'è tale struttura:

app 
    assets 
    stylesheets 
    javascripts 

Poi per ottenere l'accesso ai file in app/assets o in app/assets/any_folder si dovrebbe utilizzare il percorso /assets/file.

Aggiornato

Qui provare:

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

Oppure:

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

Questo in realtà risolto il 50% della problema xD grazie mille! Tuttavia, lo stile è ancora spento. Non sono sicuro se è perché i file CSS stanno usando percorsi relativi o? :(Dovrò andare nei file css e cambiare i percorsi alle immagini a cui si riferisce? Come: body { background-image: url (../ images/bg.jpg); background-repeat: repeat ; } Da url (../ images/bg.jpg) a url (/assets/bg.jpg)? – Orlin

+0

Oh mia parola ... che ha funzionato al 100% ... Ho usato l'url (/ assets/bg.jpg) risolve tutti i riferimenti alle immagini nei file css e ha fatto il trucco !!! Grazie mille COSÌ tanto! – Orlin

+1

Sì. Grazie :) – Orlin

4

Rails 3.1 ha introdotto il nuovo gasdotto Asset. Vi consiglio di leggere su questo: http://guides.rubyonrails.org/asset_pipeline.html

Nella tua app/views/layout/file di application.html.erb, assicuratevi di avere questo:

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

Nelle tue app/attività/fogli di stile/file di application.css, assicuratevi di avere questa linea:

*= require_tree . 

(questo farà sì che tutti i file css che avete in app/attività/Styl esheets elenco sarà disponibile per l'applicazione)

nel file css si può solo fare questo per fare riferimento le immagini nella directory app/Attività/immagini:

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

E i caratteri in un'altra directory? –

+0

Per i caratteri, penso che sia necessario aggiungere questa riga a config/application.rb: config.assets.paths << Rails.root.join ("app", "assets", "font") – calasyr