Mantener archivos estáticos en el servidor cuando se implementa con Capistrano
-
06-07-2019 - |
Pregunta
Estoy cargando archivos a mi carpeta public / files
de una aplicación Rails de forma constante a través de una interfaz web.
No quiero mantenerlos en el control de la fuente, ya que duran casi 2 GB, por lo que cada vez que hago una cap deploy
guardará esos archivos en releases /
y reemplace el directorio con la copia prístina almacenada en el repositorio.
Me pregunto cuál es la mejor manera de mantener esos archivos en el servidor, en el directorio current
. Algunas de mis ideas son:
- Elimine el directorio del control de origen y reemplácelo con un enlace a un directorio externo que Capistrano no administre.
- Cree una tarea de Capistrano para copiar el directorio a / tmp antes de implementarlo y luego vuelva a copiarlo en / public después de que haya finalizado la implementación.
¿Hay una forma estándar de hacer esto?
Solución
Puede convertir los archivos en un enlace simbólico a otro directorio de su máquina, por ejemplo, el directorio / shared en el mismo nivel que / current y / releases.
Echa un vistazo a capistrano administra los directorios / log y / tmp.
Otros consejos
Para el registro futuro, esta es la tarea que solía hacer con un directorio compartido:
task :link_shared_directories do
run "ln -s #{shared_path}/files #{release_path}/public/files"
end
after "deploy:update_code", :link_shared_directories
Ahora podemos simplemente usar: Linked_files en deploy.rb:
set :linked_files, %w{config/database.yml}
En este caso, el archivo [target_dir] /shared/config/database.yml debe existir en el servidor.