Pregunta

Tengo varias aplicaciones (una aplicación de administración, a / de aplicación "público" que no es administrador y una aplicación de servicio web) que comparten una sola base de datos.

He conseguido las aplicaciones para compartir modelos y otros códigos en su caso, por lo que no tienen múltiples copias del mismo código en cada uno. Sin embargo, la tarea que todavía tengo que configurar es cómo compartir archivos que consiguen cargarse entre aplicaciones. Estoy usando Paperclip para cargar correctamente los archivos de mis aplicaciones, pero si carga los archivos de la aplicación haciendo la carga.

Idealmente, me gustaría ser capaz de servir a todos los archivos del servicio web. Mi idea era que yo iba a necesitar algún tipo de tarea ejecutada cada vez que un nuevo archivo se carga en cualquiera de las aplicaciones para tener el archivo creado en la estructura de archivos del servicio web.

Sé que podría lograr fácilmente servir archivos desde una sola aplicación si me cargan los archivos en la base de datos (que es la forma en que he logrado esto en un conjunto de aplicaciones similar), pero no estoy seguro de si esa es la mejor ruta para ir para la gestión / servicio de los archivos. Otra idea que tenía estaba almacenando los archivos de la base de datos y tener el servicio web gestionar "porción" de ellos y tener que crear el archivo en el disco en la primera solicitud. Después de la primera solicitud para el archivo, el servicio web serviría el archivo desde el disco en lugar de partir de la base de datos.

¿Alguien tiene alguna idea sobre cuál es la mejor manera de lograr esto podría ser? O alguna idea mejor?

Gracias de antemano por cualquier retroalimentación que nadie pueda tener sobre el tema.

¿Fue útil?

Solución

Me gustaría recomendar ponerlos en una ubicación compartida que se sirve directamente por su servidor web front-end (no Rieles) si tiene ese tipo de configuración, en este ejemplo está sirviendo una ubicación llamada archivos que apunta a una carpeta en disco. Luego, en las opciones de clip, cambiar la ubicación de almacenamiento.

has_attached_file :image,  
   :url => "/files/:basename.:extension",  
   :path => "/var/htdocs/public/files/:basename.:extension" 

Otros consejos

¿Está ejecutando todas las aplicaciones en el mismo sistema UNIX / Linux? ¿Ha intentado crear enlaces simbólicos para compartir la carpeta que contiene las imágenes? El objetivo es guardar todas las imágenes en la misma ubicación. Eliminando la necesidad de tirar ganchos complicados para la creación de archivo adjunto.

Paperclip por defecto almacena cosas en: RAILS_ROOT / public / sistema /: adjunto /: id /: Estilo /: Nombre de archivo Si va a compartir una base de datos que no tendrá que preocuparse por las colisiones. Y sólo tiene que crear una carpeta de sistema para ser utilizado por cada aplicación.

Puede utilizar la carpeta / sistema público de una aplicación como el maestro, o crear uno totalmente nuevo. A partir de ahora todas las otras carpetas del sistema que no son el principal uno, se hará referencia al esclavo carpetas. Una vez que haya elegido su amo es tan sencillo como mover todo en cada carpeta esclavo de la carpeta principal. La eliminación de las carpetas de esclavos y su sustitución por un enlace simbólico a la carpeta principal.

Juego de muestras de comandos para migrar y reemplazar con enlace simbólico dado los valores predeterminados de clip. Es probablemente una buena idea para detener el servidor antes de intentar esto.

$ mv /path/to/slave/project/public/system/* /path/to/master/system
$ mv /path/to/slave/project/public/system.bak
$ ln -s /path/to/master/system /path/to/slave/project/public/system

Una vez que esté seguro de la migración es exitoso puede eliminar la copia de seguridad:

$ rm /path/to/slave/project/public/system.bak
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top