2011-01-05 9 views
5

Tengo una aplicación de rieles que me gustaría usar para varios sitios, cada uno con diferentes diseños.Carpetas públicas múltiples, instalación de raíles individuales

Me gustaría cambiar el directorio de instalación/público de los raíles a otra cosa (de forma dinámica eventualmente). Sin embargo, se han topado con un problema (bug?) Cambiar de directorios ...

En mi archivo application.rb cambio la ruta paths.public a algo distinto de "público" (digamos "site_one"). Aquí está el código:

puts paths.public.paths 
paths.public = "site_one" 
puts paths.public.paths 

Los dos comandos "pone" son para la depuración. Ahora ejecute "s" carriles y verá:

/home/macklin/app/public 
/home/macklin/app/site_one 

Esto verifica el camino se cambia correctamente. Sin embargo, poco después, los carriles lanza el siguiente error (que me haga saber si necesita la traza completa):

Exiting 
/usr/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/paths.rb:16:in `method_missing': undefined method `javascripts' for #<Rails::Paths::Path:0x7f422bd76f58> (NoMethodError) from /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.3/lib/action_controller/railtie.rb:47 

Mi conjetura es que no puede encontrar el directorio de archivos JavaScript a pesar de que está sentado claramente en la carpeta "site_one" .

¿Alguien sabe por qué estoy recibiendo esto?

Respuesta

2

Duh. Sólo tiene que añadir 2 más reglas para hojas de estilo y archivos JavaScript (supongo que se hacen borrosos cuando se cambia la ruta padre)

paths.public.stylesheets = "site_one/stylesheets" 
paths.public.javascripts = "site_one/javascripts" 
2

Sé que esta pregunta es bastante viejo, pero creo que he encontrado una respuesta para esto en Rails 4.2.

Usted simplemente tiene que poner esta línea en su config/application.rb:

middleware.use ::ActionDispatch::Static, "#{Rails.root}/another_public_folder_name", index: 'index', headers: config.static_cache_control 

Esto hace que todos los archivos de /another_public_folder_name ser servido por rieles.

Esta es la forma en que Rails usa la configuración de la carpeta estándar /public. Lo encontré comprobando las fuentes:

https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/railties/lib/rails/application/default_middleware_stack.rb#L24

Cuestiones relacionadas