ruby-on-rails ruby-on-rails-3 capistrano carrierwave

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.