Práticas de versionamento de sites

2

Eu tentei pesquisar, mas não consegui descobrir os melhores termos de pesquisa para encontrar minha resposta.

Eu tenho um servidor Ubuntu 10.04 com Apache. Desejo configurar um site que será versionado, então minha estrutura de arquivos será semelhante a:

/var/www/MyApp1.0
/var/www/MyApp1.1
/var/www/dev -> /var/www/html/MyApp1.1
/var/www/test -> /var/www/html/MyApp1.0

Onde "dev" e "test" são links simbólicos para as outras pastas. Assim, meu URL para esses dois ambientes será " link " ou " link ". Para meu ambiente prod, eu quero que o URL no navegador seja apenas " link ", sem redirecionar para algo como " link ".

Como posso configurá-lo para que o URL base aponte para uma versão específica sem um redirecionamento que altere o URL?

Obrigado,

Travis

EDITAR:

Eu sinto que devo dar mais detalhes sobre a configuração atual e deixar claro que não temos muito tempo para gastar fazendo muitas mudanças. Perdoe o comprimento, mas estou tentando pintar uma imagem precisa da nossa configuração atual, para obter a melhor solução.

Nossa equipe de desenvolvimento consiste em 9 pessoas, 5 que trabalham em nosso projeto principal (C ++), 3 que trabalham em arte para nosso projeto principal e eu, trabalhando em todo o design da web para complementar nosso projeto principal. Nós usamos o MS SourceSafe para controle de versão. Eu sei que muitas pessoas têm suas queixas com isso, mas é algo que temos usado há algum tempo e não estamos querendo mudá-lo neste momento, já que temos muitas outras prioridades.

Cada membro da equipe de desenvolvimento (inclusive eu) trabalha em uma estação de trabalho do Windows. Nós não temos o Apache instalado em nenhuma das nossas máquinas locais. Antes de começar a trabalhar aqui, eles tinham um servidor Ubuntu Linux configurado com o Apache instalado para hospedar o site. Eles se desenvolveriam em uma área de desenvolvimento nesse servidor Linux e, sempre que eles criassem uma nova construção da Web, copiariam os arquivos para sua máquina local e, a partir daí, verificá-los no SourceSafe.

Desde que estou aqui, configurei um compartilhamento do Samba no servidor Linux e o mapeei para uma unidade de rede na estação de trabalho do Windows. Dessa forma, posso verificar e excluir arquivos sem precisar copiá-los para minha máquina local. Como agora sou a única pessoa que trabalha com material da Web, deixo os arquivos em check-out o tempo todo e escrevo um script em lote para fazer o processo de "compilação". Sempre que quero atualizar nosso ambiente de teste com uma nova versão, executo o script em lote e ele faz o seguinte:

  • crie uma nova pasta para conter a nova versão do site
  • copie os arquivos do ambiente de desenvolvimento para a nova pasta
  • atualize o link "teste" para apontar para a nova pasta
  • verifique o projeto no SourceSafe, mantendo os arquivos em check-out
  • rotule o projeto usando comentários de um changelog de texto que eu atualizo enquanto faço alterações

Portanto, temos um sistema de controle de versão em vigor que pode não ser o melhor, mas funciona para nós. Eu suponho que eu poderia parar de criar pastas versionadas e usar links simbólicos, mas eu meio que gosto de ter a habilidade de alternar facilmente entre versões diferentes simplesmente atualizando rapidamente um link simbólico.

Eu realmente aprecio as respostas, deixando-me saber quais são as melhores práticas (percebo agora que não dei um bom título a esse tópico para minha pergunta). Eu os achei muito informativos, e como alguém que realmente trabalhou sozinho ou em uma pequena equipe de outros que são igualmente inexperientes, eu não conhecia essa informação antes, e seguirei essas práticas para futuros empreendimentos.

No entanto, por questão de tempo e facilidade, existe uma boa maneira de manter minha configuração atual e apenas redirecionar o URL base para uma pasta diferente sem alterar o URL? Essencialmente, eu faria do / var / www um link simbólico para MyApp1.0, mas o problema que eu iria encontrar lá é que eu não conseguiria mais acessar o / var / www / dev ou / var / www / test.

Obrigado mais uma vez,

Travis

    
por Travesty3 29.11.2010 / 22:38

4 respostas

1

Eu não faria isso com links simbólicos; Eu faria tudo com mod_rewrite.

RewriteEngine on
RewriteRule /dev/(.*) /var/www/MyApp1.1/$1 [L]
RewriteRule /test/(.*) /var/www/MyApp1.0/$1 [L]
RewriteRule /(.*) /var/www/MyApp0.9/$1 [L]
    
por 30.11.2010 / 05:41
1

As melhores práticas aqui são usar um sistema de controle de revisão como o subversion, o mercurial ou o git para lidar com as versões.

O processo é que você configure um repositório principal ou raiz em qualquer lugar (ele pode estar no servidor da web ou em outro lugar). Para fazer alterações em seu site, verifique o código do repositório, modifique e teste em sua máquina local e, em seguida, confirme ou mescle suas alterações no repositório quando estiver satisfeito com elas (ou até mesmo antes - essa é a beleza da versão ).

Então você configura exatamente dois sites no Apache - nem mais nem menos. Um site é e sempre será seu site de produção atual. O outro é e sempre será o seu site de QA / Staging / pré-produção. Quando você tiver um novo conjunto de alterações que deseja colocar ao vivo, primeiro verifique / atualize / mescle as alterações para o número de revisão apropriado do repositório para a área de QA e teste novamente tudo para garantir que ele funcione conforme esperado. Assumindo que tudo está bem, agora você pode fazer o mesmo para o seu site ao vivo.

Isso evita que você tenha que configurar um novo conjunto de links ou pastas sempre que quiser atualizar seu site e funcionará bem com a maioria das ferramentas normalmente usadas para desenvolver a Web. Ele também fará um trabalho muito melhor de acompanhar seu histórico.

    
por 30.11.2010 / 06:41
0

Não tenho certeza se uma instalação do apache permitirá que você atenda páginas de links simbólicos de qualquer maneira. Eu sei que o meu não vai.

    
por 30.11.2010 / 15:16
0

@Ignacio Vazquez-Abrams:

Sua resposta parece a minha solução, mas eu tive que mudar um pouco e preciso de ajuda extra. Meu arquivo .htaccess (localizado em / var / www / LicenseManager, que é a raiz do meu domínio) tem esta aparência:

Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteRule dev(.*) /var/www/LicenseManager/LicenseManager1.02/$1 [L]
RewriteRule test(.*) /var/www/LicenseManager/LicenseManager1.02/$1 [L]
RewriteRule ^$ /var/www/LicenseManager/LicenseManager1.02/$1 [L]

Eu tenho algumas perguntas sobre isso. Com isso configurado, funciona bem se meu URL for " link ", mas se meu URL for " link "(sem a barra final), então meus arquivos include não foram encontrados (arquivos CSS e JavaScript). Eu não estou muito familiarizado com o regex, então talvez seja apenas uma questão de consertar isso.

Além disso, tive que substituir a quarta linha do seu exemplo pela minha, senão eu estava recebendo um erro interno no servidor. Depois de alterá-lo, ele funciona para " link " ou " link ", mas em ambos os casos ainda tenho o problema com meus arquivos de inclusão.

Então, como posso alterar meu arquivo .htaccess para que os arquivos de inclusão sejam encontrados com ou sem a barra final?

Obrigado novamente!

Travis



P.S. Eu sei que isso não deveria funcionar como um fórum, e que eu deveria postar um comentário na postagem de outra pessoa como resposta, mas minha pergunta seria muito mais difícil de ler em uma caixa de comentários, sem formatação. Além disso, sou muito prolixo para encaixar tudo o que preciso na caixa de comentários.

EDITAR:

Resolveu isso! Aqui está o que meu arquivo .htaccess final se parece:

Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteRule ^dev$ dev/ [R]
RewriteRule ^test$ test/ [R]
RewriteRule ^dev/(.*) /var/www/LicenseManager/LicenseManager1.02/$1 [L]
RewriteRule ^test/(.*) /var/www/LicenseManager/LicenseManager1.02/$1 [L]
RewriteRule ^(src/(.*)|$) /var/www/LicenseManager/LicenseManager1.02/$1 [L]

Eu tive que mudar os regexes um pouco porque, do jeito que eles eram, eles combinavam se "dev" ou "test" fosse encontrado em qualquer lugar, então " link " seria redirecionado para o " link ". O cursor (^) garante que "dev" só pode ser encontrado no início, e o sinal de dólar ($) garante que nada mais siga "dev". Alterei os outros para garantir que algo como " link " não corresponda à regra.

Para a última regra, percebi que se o regex é apenas (. *), ele corresponde a qualquer coisa, então mesmo depois de redirecionado, ele ainda corresponde e tenta redirecionar novamente, resultando em um loop infinito, que finalmente mostra você um 500 Internal Server Error. A pasta "src" é o único diretório em meu projeto, e index.php é o único script na pasta principal (index.php é automaticamente mostrado quando omitido). Então, a última regra basicamente diz "se a string começa com" src / "OR está em branco, redireciona."

Obrigado novamente por sua ajuda, Ignacio!

    
por 30.11.2010 / 23:57