Upload de arquivo: preservando arquivos entre deploys

Diretório de Dados vs Repositório

Sempre que você faz o deploy de sua aplicação através do comando git push, o repositório remoto (no servidor) é apagado e recriado a partir de uma cópia "limpa". Isso significa que, caso seu app crie arquivos dentro do repositório estes serão perdidos.

Para guardar arquivos persistentes entre deploys, salve-os no diretório $OPENSHIFT_DATA_DIR, pois esta área está fora do repositório e não é destruída a cada ciclo de deploy.

Algumas variáveis importantes:

$OPENSHIFT_REPO_DIR: Diretório de sua aplicação "live". Seu conteúdo vem de ~/git/<app>.git
$OPENSHIFT_DATA_DIR: Diretório de arquivos persistentes, que resistem entre os deploys.

Para mais informações sobre variáveis de ambiente, assista nosso vídeo Variáveis de Ambiente.

Exemplo - Wordpress e upload de imagens, temas e plugins

Um exemplo comum é o Wordpress, que permite ao usuário fazer upload de imagens, instalar plugins e temas através de sua interface web. Estes arquivos são salvos no diretório uploads da aplicação, portanto dentro do repositório ($OPENSHIFT_REPO_DIR/php/uploads).

Para evitar a perda destes arquivos no próximo deploy, você precisa garantir que estes diretórios localizem-se dentro do $OPENSHIFT_DATA_DIR, criando links no local original (php/wp-content/uploads, php/wp-content/plugins e php/wp-content/themes) para os diretórios correspondentes no $OPENSHIFT_DATA_DIR.

Uma forma de implementar isso é criando os links dinamicamente, a cada deploy.

Crie o arquivo .openshift/action_hooks/deploy (caso não existe) e inclua o seguinte script:


#!/bin/bash # Este script move cada uma das ORIGENS para o data-dir, # substituindo-os por links dentro do repo-dir.
#
# ATENCAO !!
# ARQUIVOS SALVOS NOS DIRETORIOS ABAIXO, DENTRO DO REPOSITORIO GIT, SERAO
# PERDIDOS A CADA PUSH. ORIGENS=( # Caminhos relativos ao $OPENSHIFT_REPO_DIR: php/wp-content/uploads # torna-se um link $OPENSHIFT_REPO_DIR/wp-content/uploads -> $OPENSHIFT_DATA_DIR/wp-contents/uploads php/wp-content/themes php/wp-content/plugins # inclua outros diretorio aqui ) echo "-- Ajustando diretorios persistentes..." for DIR in ${ORIGENS[*]}; do ORIGEM="${OPENSHIFT_REPO_DIR}$DIR" DESTINO="${OPENSHIFT_DATA_DIR}$DIR" if [ -d "$ORIGEM" ]; then if [ -d "$DESTINO" ]; then echo " - Relinkando diretorio: $ORIGEM -> $DESTINO" rm -rf "$ORIGEM" else echo " - Criando diretorio: $ORIGEM -> $DESTINO" mkdir -p ${DESTINO%/*} mv $ORIGEM $DESTINO fi ln -sf "$DESTINO" "$ORIGEM" else echo " - Ignorando diretorio inexistente: $ORIGEN" fi done

 

Vamos dar permissão de execução ao script:

$ chmod +x .openshift/action_hooks/deploy

$ git add .openshift/action_hooks/deploy 

No windows, é necessário executar:

$ git update-index --chmod=+x .openshift/action_hooks/deploy

Agora é só publicar:

$ git push

 

Tem mais dúvidas? Envie uma solicitação

4 Comentários

  • 0
    Avatar
    caina

    não entendi a parte que verifica se os conteúdos são iguais, se o objetivo no final das contas é manter os arquivos no ar, nunca vão ser iguais, ou não é isso?

    no demais, ajudou muito.

  • 0
    Avatar
    Mateus Caruccio

    Oi Caina.

    Você poderia citar a parte que não entendeu? Não entendi a sua pergunta :)

  • 0
    Avatar
    caina

    Este trecho de código:

    # falha deploy caso ambos diretorios existam, para evitar perda de dados
    if [ -d $ORIGEM -a -d $DESTINO ]; then
    echo "Deploy falhou: diretorio uploads/ duplicado (veja .openshift/action_hooks/deploy)"
    exit 1
    fi

  • 0
    Avatar
    Mateus Caruccio

    Oi Caina. Desculpe a demora (4 meses!) mas por algum motivo não recebi sua mensagem.

    Alterei o script pois existia um problema na lógica toda. Verifique se agora está mais claro para você.

Por favor, entre para comentar.
Powered by Zendesk