¡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
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
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
Sí. Gracias :) – Orlin