ruby on rails 4 - que - Rails 4 activos estáticos en público/o app/asset/
ruby on rails que es (1)
Cuando utiliza los rake assets:precompile
, Rails mueve todos los activos de su carpeta de app/assets
, a public/assets
. Esto es como un navegador normal no tiene acceso a su directorio de app
, pero sí tiene acceso al public
.
Entonces, para responder a tu pregunta, aquí están mis pensamientos. Si sus imágenes son para el diseño de su sitio, por ejemplo, logotipos o fondos, entonces debe almacenarlas en el directorio app/assets/images
, sin embargo, si las imágenes son generadas por el usuario, como las imágenes de perfil, entonces estas deben almacenarse directamente en algo así. como public/images
Lo ideal sería almacenarlos en S3 o en un CDN, pero ya lo está haciendo.
Como beneficio adicional, Carrierwave, una gema de carga de imágenes de Rails, utiliza una ruta de tipo public/images
como el almacén predeterminado para sus imágenes, como puede ver en su archivo de configuración:
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"images/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
¡Espero que esto ayude!
Lo siento si esta es una acumulación larga para una pregunta simple, pero quería aclarar mis pensamientos.
He usado Rails 4 en un par de proyectos ahora y he estado usando image_tag(''/assets/image.png'')
para sortear los cambios en la forma en que los ayudantes de ruta de activos funcionan en Rails 4. Eso es hasta hoy cuando decidí para aprender más sobre los cambios y encontrar esta primera nota de cambio en los rieles de las ruedas dentadas . También he notado que los ASSET_PUBLIC_DIRECTORIES
en /actionview/lib/action_view/helpers/asset_url_helper.rb#L170 en Rails helpers solo apuntan a carpetas públicas. Me resultó bastante obvio que si está accediendo a archivos estáticos, Rails quiere que use la carpeta pública.
Así que ahora que he descubierto esto, simplemente no puedo entender por qué los documentos de los rieles de borde indican claramente esto:
En versiones anteriores de Rails, todos los activos estaban ubicados en subdirectorios de público como imágenes, javascripts y hojas de estilo. Con la canalización de activos, la ubicación preferida para estos activos ahora es el directorio de aplicaciones / activos.
image_path en la práctica genera un uri para la carpeta pública / imágenes que es totalmente contrario.
Y para resumir todo esto, necesito usar todos los ayudantes disponibles y compiladores de compendios, porque termino implementando mis activos en S3 con asset_sync .
Así que mi pregunta es justa; ¿Hay un lugar correcto para colocar imágenes / activos no compilados y usar los ayudantes de asset_path? Toda la documentación y todas las demás conversaciones sobre desbordamiento de pila se refieren a personas que utilizan la carpeta de aplicaciones / activos, pero Sprockets-Rails quiere que utilicemos el público para activos no relacionados con el resumen. ¿Los documentos y la información en la web solo necesitan una actualización, o son otros los que simplemente vencen con la preparación de todas las rutas de activos con / asset /?
ACTUALIZACIÓN: Creo que en realidad tuve un problema en el que no estaba reiniciando mi servidor de desarrollo y las imágenes en la aplicación / los activos / las imágenes no aparecían, por lo que no sería público. También tenga en cuenta que estaba usando ayudantes de activos en mi paperclip default_url (a la que se hace referencia como la forma de señalar activos en varias respuestas de desbordamiento de pila que encontré; el nombre del activo no interpolado no se encontraría como un archivo existente, obviamente.