Normalmente, cuando estoy desarrollando aplicaciones para Facebook, primero, las hago Offline, ejecutándolas en mi servidor local y, una vez que funcionan, las subo al servidor desde las que se ejecutarán, aunque muchas veces hay ciertos problemas una vez se está ejecutando la aplicación de forma definitiva, que requieren hacer algunas modificaciones más, y con esto, subir varias veces los archivos de los scripts.
Por otra parte, a veces, en ciertas aplicaciones web, es necesario introducir cierta información nueva (que hago fuera de línea) y cuando todas las novedades han sido introducidas procedo a subirlo todo junto.
También es importante, sobre todo para proyectos más o menos grandes, que sólo se suban al servidor los archivos nuevos o modificados antes de la última actualización, es muy importante, ya que la ejecución puede eternizarse si tenemos que subir 10Mb de datos cada vez que queremos actualizar, por lo tanto, almacenamos en un archivo el momento en que se ejecutó el script por última vez, y cada vez que buscamos archivos, lo hacemos con los que han sido actualizados a partir del momento que almacenamos en el fichero anterior.
Para eso creé este script (aún queda mucho trabajo por hacer), pero por ahora hace bastante bien el apaño. Yo llamo a este archivo (autoftp):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | #!/bin/bash servidor=$1 ruta_serv=$2 ruta_local=$3 endline=" " dir_actual=`pwd` cd $3 if [ -e $ruta_local"/last_update" ]; then f_locales=`find . -newer $ruta_local/last_update` else f_locales=`find .` fi function cierratodo() { kill $ftp_pid kdialog --msgbox $1 } function estadoman() { while read estado do estadonum=`echo $estado | cut -d' ' -f1` echo $estado if [[ $estado != "Not connected" ]]; then if [[ $estadonum == "226" ]]; then subidos=$(($subidos+1)) kdialog --passivepopup "Subido archivo "$subidos" de "$total_archivos 2 elif [[ $estadonum == "221" ]]; then cierratodo "Los archivos se subieron con éxito" date +%s > $ruta_local"/last_update" # Fin del programa fi else echo "Cerrandooo" cierratodo "La conexión se cerró inesperadamente" fi done } to_do="pass"$endline"cd $ruta_serv"$endline; last_dir=""; total_archivos=0 for i in $f_locales do arch_relat=${i:2} if [ ! -z $arch_relat ]; then nombre_dir=`dirname $arch_relat` if [[ $nombre_dir == "." ]]; then nombre_dir="" fi if [ -d $arch_relat ]; then to_do=$to_do"cd $ruta_serv/$nombre_dir"$endline to_do=$to_do"mkdir $ruta_serv/$arch_relat"$endline else # echo "*"$nombre_dir"="$last_dir"*"; if [[ $last_dir != $nombre_dir ]]; then last_dir=$nombre_dir to_do=$to_do"cd $ruta_serv/$nombre_dir"$endline fi to_do=$to_do"put $ruta_local/$arch_relat "`basename $arch_relat`$endline total_archivos=$(($total_archivos+1)) # to_do=$to_do"put $3/$arch_relat\n" echo "FICHERO --- $arch_relat"; fi fi done OLDIFS=$IFS IFS=" " to_do=$to_do"quit"$endline if [[ $total_archivos > 0 ]]; then for j in $to_do ; do echo $j;done; rm /tmp/ftp_pipe > /dev/null 2>&1 mkfifo /tmp/ftp_pipe > /dev/null 2>&1 ftp -v totaki.com > /tmp/ftp_pipe <<EOF & `for j in $to_do ; do echo $j;done;` EOF ftp_pid=$! else kdialog --msgbox "No hay archivos para subir" fi cd $dir_actual IFS=$OLDIFS rm /tmp/ftp_pipe > /dev/null 2>&1 |
Para su uso, son necesarios tres parámetros:
- Dirección del servidor
- Ruta donde se colocan los archivos en el directorio remoto
- Ruta de donde se buscarán los archivos en el directorio local
Requerimientos:
- kdialog (Se puede modificar el script para utilizar otro fácilmente)
- ftp (Este programa se encargará de subir los archivos)
Para configurar el script es necesario editar el archivo .netrc localizado en nuestro home y donde irá el nombre de usuario y contraseña del FTP (este fichero es leído por ftp automáticamente y así no necesitamos incluir passwords ni en la línea de comando ni en el propio script, que quedan muy feos). El fichero .netrc tiene la siguiente estructura:
machine [servidor] login [usuario] password [contraseña]
Por ejemplo podemos hacer un .netrc que contenga:
machine www.servidor.com login pepito password josefina
Una vez completado esto, podemos asociar una tecla al script, y con ello simplemente pulsando esa tecla se subirán los archivos al servidor.
Por último, yo lo tengo configurado en Fluxbox con Mod4+F5 o lo que es lo mismo la tecla de Windows y F5; basta con crear un script lanzador que incluya lo siguiente (yo lo llamo ftp_upload):
1 2 3 4 | #!/bin/bash # Modelo #/home/gaspy/.scripts/autoftp [servidor] [ruta interna] [ruta_local] #/home/gaspy/.scripts/autoftp ftp.servidor.com http_docs/pruebas /home/yomismo/proyectos/pruebas |
añadir al fichero keys dentro de /home/[usuario]/.fluxbox/ la siguiente línea:
Mod4 F5 :execcommand ~/.scripts/ftp_upload