ruby on rails - Archivos de Carrierwave con Capistrano
ruby-on-rails ruby-on-rails-3 (5)
Estoy usando rails 3.2 con asset y carrierwave para subir algunas imágenes, que almacenan en / public / uploads / photo / ..... pero cuando hago un límite: deploy (con capistrano) mi aplicación de directorio actual no contiene los archivos que cargué, porque capistrano hace una nueva versión ...
=== Actualización ===
Después de todo, yo uso esto:
adentro: desplegar el espacio de nombres
task :symlink_uploads do
run "ln -nfs #{shared_path}/uploads #{release_path}/public/uploads"
end
y después:
after ''deploy:update_code'', ''deploy:symlink_uploads''
=== Re Update ===
La solución de @tristanm es la mejor manera de resolver esto.
Capistrano crea un nuevo directorio para cada despliegue.
Hay algunas excepciones a esto. Por ejemplo, los archivos de registro se comparten entre los directorios de despliegue porque solo son enlaces simbólicos. También debe crear un enlace simbólico para cargas públicas /.
Aquí está el comando:
run <<-CMD
rm -rf #{latest_release}/public/uploads &&
ln -s #{shared_path}/uploads #{latest_release}/public/uploads
CMD
Qué tal esto:
# config/deploy.rb
set :shared_children, shared_children + %w{public/uploads}
:shared_children
predeterminada en %w(public/system log tmp/pids)
por lo que estamos ampliando esta lista.
EDITAR:
No se olvide de ejecutar la cap deploy:setup
después de cambiar :shared_children
para que los nuevos destinos se creen en shared
.
EDITAR Capistrano 3:
Capistrano 3 usa la configuración linked_dirs
y ya no especifica public/system
como valor predeterminado.
set :linked_dirs, fetch(:linked_dirs) + %w{public/system public/uploads}
Usando Capistrano 3, acabo de agregar esta línea a mi config / deploy.rb
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/uploads}
Entonces corre:
$ cap production deploy
Con Capistrano 3 y sin necesidad de volver a desplegar.
Como @tristanm mencionó, agregue esto a su config / deploy.rb
# config/deploy.rb
set :linked_dirs, fetch(:linked_dirs) + %w{public/uploads}
Para que capistrano cree compartido / público / carga
cap deploy:check:linked_dirs
Ahora la tapa puede crear el enlace simbólico
cap deploy:symlink:shared
Finalmente, si tiene copias de seguridad de las cargas, puede ponerlas en shared / public / uploads / y deberían funcionar sin necesidad de volver a desplegarlas.
Vaya a la carpeta compartida de su servidor de aplicaciones y cree un directorio de carga.
mkdir carga
En su archivo deploy.rb, inserte estos códigos en el espacio de nombres de implementación
tarea: symlink_uploads do
ejecutar "rm -rf # {latest_release} / public / uploads && ln -nfs # {shared_path} / uploads # {latest_release} / public / uploads"
fin
después de ''deploy: update_code'', ''deploy: symlink_uploads''
Ahora borre los archivos viejos presentes ya que no funcionarán. Suba un archivo nuevo y finalice la implementación de su aplicación nuevamente. Debería funcionar ahora.