2011-06-14 4 views
5

Utilizo cap invoke mucho para ejecutar comandos en un grupo de servidores. También me gustaría usar capistrano para enviar un solo archivo a un montón de servidores.Cómo copiar un archivo a un montón de servidores con capistrano

Al principio pensé que PUT lo haría, pero put hace que cree los datos para el archivo. No quiero hacer esto, solo quiero copiar un archivo existente de la máquina donde estoy ejecutando el comando capistrano y las otras máquinas.

Sería genial si pudiera hacer algo como esto:

host1$ cap HOSTS=f1.foo.com,f2.foo.com,f3.foo.com COPY /tmp/bar.bin 

Yo esperaría que esto copia sistpral1: /tmp/bar.bin a f1.foo.com:/tmp/bar.bin~~V~~singular~~3rd y f2.foo.com:/tmp/bar.bin y f3.foo.com:/tmp/bar.bin

Este tipo de cosas parece muy útil, así que estoy seguro de que debe haber una forma de hacerlo ...

Respuesta

10
upload(from, to, options={}, &block) 

La acción de carga almacena el archivo en la ruta de acceso dada en todos los servicios es el objetivo de la tarea actual.

Si alguna vez usó la tarea deploy: upload antes, entonces quizás ya sepa cómo funciona este método. Toma la ruta del recurso que desea cargar y la ruta de destino en los servidores remotos.

desc "Uploads CHANGELOG.txt to all remote servers." 
task :upload_changelog do 
    upload("#{RAILS_ROOT}/CHANGELOG.txt", "#{current_path}/public/CHANGELOG") 
end 

source

+7

NB. si obtiene un error como 'Por favor, especifique al menos un archivo o directorio para actualizar', luego llame a' top.upload (...) 'no solo' upload (...) 'para desambiguar. ref: http://www.mail-archive.com/[email protected]/msg04699.html –

+1

Si está utilizando Rails 3, recuerde usar 'Rails.root' en lugar de' RAILS_ROOT'. – Mika

+4

El uso de 'Rails.root' no funcionará ya que Rails no se carga cuando ejecuta' cap'. En este ejemplo, querrá usar 'File.expand_path ('../../ CHANGELOG.txt', __FILE __)'. –

1

Esto carga todos los archivos en los servidores respectivos.

tapa de despliegue: subir archivos = abc, def

0

Mostrar todas las tareas:

cap -T 
cap deploy    # Deploys your project. 
cap deploy:check   # Test deployment dependencies. 
cap deploy:cleanup  # Clean up old releases. 
cap deploy:cold   # Deploys and starts a `cold'... 
cap deploy:create_symlink # Updates the symlink to the ... 
cap deploy:migrations  # Deploy and run pending migr... 
cap deploy:pending  # Displays the commits since ... 
cap deploy:pending:diff # Displays the `diff' since y... 
cap deploy:rollback  # Rolls back to a previous ve... 
cap deploy:rollback:code # Rolls back to the previousl... 
cap deploy:setup   # Prepares one or more server... 
cap deploy:symlink  # Deprecated API. 
cap deploy:update   # Copies your project and upd... 
cap deploy:update_code # Copies your project to the ... 
cap deploy:upload   # Copy files to the currently... 
cap deploy:web:disable # Present a maintenance page ... 
cap deploy:web:enable  # Makes the application web-a... 
cap integration   # Set the target stage to `in... 
cap invoke    # Invoke a single command on ... 
cap multistage:prepare # Stub out the staging config... 
cap production   # Set the target stage to `pr... 
cap shell     # Begin an interactive Capist... 

que puede usar:

cap deploy:upload 

Ver: https://github.com/capistrano/capistrano/wiki/Capistrano-Tasks#deployupload

Cuestiones relacionadas