Qual é a melhor maneira de atualizar a partir de Django 0,96 a 1,0?
Pergunta
Devo tentar realmente atualizar meu aplicativo existente, ou simplesmente reescrevê-lo na sua maioria a partir do zero, poupando quais peças (templates, etc) eu posso?
Solução
Embora isso depende do que você está fazendo, a maioria das aplicações deve ser capaz de apenas atualizar e corrigir tudo o que breaks. Na minha experiência, as principais coisas que eu tinha que consertar depois de uma atualização são
-
Alterações a algumas das coisas funky com modelos, como a sintaxe para seguir as chaves estrangeiras.
-
Um pequeno conjunto de alterações do modelo, mais notavelmente auto-escapando.
-
Qualquer coisa que depende da estrutura específica de internos do Django. Isto não deve ser um problema a menos que você está fazendo coisas como modificar dinamicamente internos do Django a mudar seu comportamento de uma forma que é necessário / conveniente para o seu projeto.
Para resumir, a menos que você está fazendo um monte de coisas realmente estranho e / ou complexo, uma simples atualização deve ser relativamente indolor e necessita apenas de algumas alterações.
Outras dicas
Upgrade. Para mim, foi muito simples: a mudança __str__()
para __unicode__()
, escrever admin.py
básico, e feito. Basta começar a executar o seu aplicativo em 1.0, testá-lo, e quando você encontrar um uso de erro a documentação sobre trás-incompatíveis mudanças para ver como corrigir o problema.
Apenas atualizar seu aplicativo. O interruptor de 0,96-1,0 era enorme, mas em termos de Trás incompatível muda duvido seu aplicativo ainda tem 10% deles.
Eu estava no porta-malas antes de Django 1.0 para que eu a transição para mim foi ao longo do tempo, mas, mesmo assim, os únicos grandes coisas que eu tive que mudar estavam newforms, newforms-admin, str () para unicode () e maxlength para max_length
A maioria das outras mudanças foram novas funcionalidades ou regravações de back-end ou coisas que, como alguém que estava a construir sites básicos nem sequer chegar perto.
Somente sites mais simples são fáceis de atualizar.
Esperar dor real se o seu site acontece a ser para não-ASCII parte do mundo (leia-se: em qualquer lugar fora dos EUA e Reino Unido). A mudança mais dolorosa em Django foi a mudança de bytestrings para unicode objetos internamente - agora você tem que encontrar todos os lugares onde você usar bytestrings e mudar isso para unicode. Pior caso é a prestação modelo, você nunca saberá que você se esqueceu de mudar uma variável até chegar UnicodeError.
Outra coisa notável:. manipuladores ( oldforms ) ter ido e você não tem outra maneira do que para reescrever todas as peças com formas ( newforms )
Se este for o seu caso e seu projeto é maior do que 2-3 apps, eu estaria um pouco relutante em atualizar até que realmente necessário.
Nós atualizamos em um processo em várias fases e estou muito feliz com isso. O aplicativo em questão foi sobre 100.000 LoC e executar várias funções de negócios centrais com o lote de interface com sistemas legados. Nós trabalhamos assim:
- Update para django unicode 0,97-post fundem. Corrigir todos os problemas unicode
- refatorar o aplicativo em aplicativos reutilizáveis, adicionar testes. Isso nos deixou com 40.000 LoC na aplicação principal / Projeto
- Atualização para django 0,97 post autoexcape mesclagem. Fix auto escapar nos aplicativos reutilizáveis ??criados no 3. Em seguida, corrigir os problemas de auto-escaping restantes na aplicação mian.
- Atualização para 1.0. O que restou foi principalmente a fixação do material de administração.
A coisa toda levou cerca de 6 meses onde nós onde executando um ramo de produção legado em nossos servidores, enquanto portar um outro ramo a 1,0. Enquanto isso nós também, onde a adição de recursos para o ramo de produção.
A fusão final foi muito menos confuso do que o esperado e levou cerca de uma semana para 4 codificadores que se fundem, rever, testar e corrigir. Em seguida, rolou para fora, e por cerca de uma semana foi mordido por insetos anteriormente inesperados.
Apesar de tudo, estou bastante satisfeito com o resultado. Temos uma muito melhor codebase agora para um maior desenvolvimento.