2012-07-29 23 views
6

¡Estoy atascado! xD He estado trabajando en un proyecto de Rails y tengo problemas para acceder a mis activos usando rutas relativas. Un amigo mío está trabajando en el lado html/css mientras manejo los controladores y modelos. Mi amigo me dio un lote de archivos estructurados de la siguiente manera:rutas relativas para acceder a los recursos de rieles

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

Dentro de mi directorio app/views/layouts, tengo un final.html.erb llamado diseño que se utiliza para toda mi aplicación web. También tengo 1 página (contenido de cuerpo html) que intento renderizar con este diseño en la aplicación/vistas/páginas llamadas final_page.html.erb ... el enrutamiento necesario está en su lugar para que la página se cargue; sin embargo, solo carga el contexto de final_page.html.erb (sin imágenes, estilos ni fuentes). Cuando voy a la consola y escribo "rails server" y visito localhost: 3000, aparece la página ... naked lol. La consola muestra la siguiente información:


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) 

creo que el problema es que yo estoy tratando de acceder a los archivos utilizando rutas relativas. Mi archivo de diseño se parece a esto:

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

Además, en el cuerpo de mi archivo final_page.html.erb, trato de acceder a las imágenes utilizando rutas relativas, así ... así:

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

Mi amigo escribió la mayor parte de este html y tiene 0 experiencia trabajando con rieles. Decidí cambiar las solicitudes de los activos de esta manera:

Desde:

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

Para:

<%= stylesheet_link_tag "application.css" %> 

Desde:

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

Para:

<%= javascript_include_tag "application.js" %> 

Desde:

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

Para:

<%= image_tag "mainImg.jpg" %> 

Esto ayuda un poco, ya que la carga de imágenes, y muy poco del estilo viene a través de; sin embargo, está muy lejos de lo que se supone que debe ser. Pienso que es porque mi amigo hace llamadas relativas dentro de los archivos de la CSS a sí mismos:

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

he tratado sustituirlas por url (<% = asset_path 'bg.jpg' %>), etc ... pero no tiene efecto. He intentado muchas cosas y he leído tantas publicaciones. Me pregunto si hay una forma en que Rails me permita usar rutas relativas. He intentado:

config.assets.enabled = false 

pero eso no ayuda ... Por favor ... ¿qué estoy haciendo mal? No creo que mi amigo quiera dejar de usar caminos relativos para su trabajo, ya que es la forma en que hace las cosas.El sitio se activa bien fuera de Rails, pero necesito que funcione con Rails para mi aplicación web. Cualquier consejo sería muy apreciado. Gracias por tener la paciencia de leer todo esto.

P.S. Estoy usando Ruby 1.9.3, y Rails 3.2.6

Respuesta

6

Trate de usar /assets/style.css no /assets/stylesheets/style.css y así sucesivamente.

Si existe tal estructura:

app 
    assets 
    stylesheets 
    javascripts 

continuación para obtener acceso a los archivos en app/assets o en app/assets/any_folder se debe utilizar la ruta /assets/file.

Actualizado

Aquí Proveedores:

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

O:

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

En realidad, esto resuelve el 50% de la problema xD muchas gracias! Sin embargo, el estilo todavía está apagado. No estoy seguro si es porque los archivos CSS están usando rutas relativas o? :(¿Tendré que ir a los archivos css y cambiar las rutas a las imágenes a las que hace referencia? Como: cuerpo { imagen de fondo: url (../images/bg.jpg); fondo-repetir: repetir ; } De url (../images/bg.jpg) a url (/assets/bg.jpg)? – Orlin

+0

Oh mi palabra ... eso funcionó al 100% ... Usé la url (/ assets/bg.jpg) corregir todas las referencias de imagen en los archivos css y funcionó !!! ¡Muchas gracias TANTO! – Orlin

+1

Sí. Gracias :) – Orlin

4

Rails 3.1 introduce la nueva tubería de activos. Yo recomendaría que lea sobre esto: http://guides.rubyonrails.org/asset_pipeline.html

En su aplicación views/layouts archivo// application.html.erb, asegúrese de que tiene esto:

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

en su aplicación/activos/hojas de estilo/archivo application.css, asegúrese de que contiene esta línea:

*= require_tree . 

(esto asegurará que todos los archivos CSS que tiene almacenado en la aplicación/activos/Styl esheets estará disponible para la aplicación)

directorio de su archivo CSS que sólo se puede hacer esto con imágenes de referencia en el directorio app/assets/images:

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

¿Qué hay de las fuentes en otro directorio? –

+0

Para fuentes, creo que debe agregar esta línea a config/application.rb: config.assets.paths << Rails.root.join ("app", "assets", "fonts") – calasyr

Cuestiones relacionadas