The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2016-07-09
Desenvolvimento de software

Gerir a estrutura da base de dados em várias filiais

Tomasz Kowalewski

Desenvolver uma aplicação não significa apenas implementar novas funções ou corrigi-la. Por vezes, é necessário reverter as alterações e voltar à fase anterior de um projeto. Um problema frequente que pode surgir quando se trabalha em vários ramos está relacionado com a manutenção da versão adequada de uma estrutura de base de dados. Os programadores que utilizam rails têm à sua disposição soluções prontas a utilizar. Estas soluções suportam a implementação e o controlo das alterações à base de dados - são as migrações. Não vou descrever como funciona e quais as possibilidades que oferece - gostaria de me concentrar no problema de manter a versão adequada de uma estrutura de base de dados ao mudar de ramo.

A camada de base de dados de uma aplicação é um ser separado e é controlada apenas por migrações. Ao criar novas migrações, lembre-se de tornar reversível a transformação planeada de uma estrutura de base de dados. Claro que, em casos extremos, podemos criar IrreversívelMigração no para baixo método. Isto também informará nós sobre o facto de a migração não poder ser revertida. Existem diferentes tipos de alterações que efectuamos na migração - criação, modificação e remoção de tabelas, colunas ou índices. As operações de eliminação e modificação são as mais sensíveis às alterações. Porquê? Consideremos o seguinte cenário: Estamos a trabalhar com a ramificação principal, que é o nosso principal caminho de trabalho. Atualmente, temos uma tabela:

 class CreateArticles < ActiveRecord::Migration
   def change
     criar_tabela :artigos do |t|
       t.string :nome
       t.text :descrição
       t.string :status, null: false
       t.timestamps null: false
     end
   end
 end

O nosso Artigo O modelo tem validações que exigem a presença de nome, descrição e estatuto atributos.

 class Article < ActiveRecord::Base
   valida :nome, presença: true
   valida :descrição, presença: true
   valida :status, presença: true
 fim

Estamos a implementar mudanças na nossa artigos mesa em caraterística e eliminamos o ramo de desenvolvimento estatuto coluna.

 class RemoveStatusColumnFromArticles < ActiveRecord::Migration
   def change
     remove_column :articles, :status, :string
   end
 fim

Executamos a migração:

 $ [example/feature]: bundle exec rake db:migrate
 == 20150605120955 RemoveStatusColumnFromArticles: migrando ===================
 -- remove_column(:articles, :status, :string)
   -> 0.0717s
 == 20150605120955 RemoveStatusColumnFromArticles: migrado (0.0718s) ==========

O esquema de uma base de dados é alterado:

diff --git a/db/schema.rb b/db/schema.rb
index 2a100a9..76438c1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,14 +11,13 @@ #

Recomenda-se vivamente que verifique este ficheiro no seu sistema de controlo de versões.

-ActiveRecord::Schema.define(version: 20150605120350) do
+ActiveRecord::Schema.define(version: 20150605120955) do
  createtable "artigos", force: :cascade do |t|
    t.string "nome"
    t.text "description" (descrição)
- t.string "status", null: false t.datetime "createdat", null: false
    t.datetime "updated_at", null: false
  final

end

De seguida, submetemos as alterações ao ficheiro caraterística branch. Para simular este problema, mudamos o ramo atual para master. A estrutura base foi alterada pela migração, que exclui o ramo estatuto coluna no caraterística ramo. Vamos tentar utilizar o seguinte comando:

Article.create!(name: "Kaboom", description: "Lorem ipsum...", status: "active")

O que é que acontece depois de executar as acções acima mencionadas? código? O erro: ActiveRecord::UnknownAttributeError: atributo desconhecido 'status' para o artigo será levantado e isso deve-se à versão incompatível da estrutura de uma base de dados. Antes de mudar o ramo para master, devemos reverter a migração que exclui o estatuto da coluna Artigo mesa.

O que podemos fazer para verificar se temos de reverter algumas migrações antes de mudar os ramos? Com a utilização do sistema de controlo de versões (aqui é git) podemos verificar o nosso trabalho criando um alias útil:

 ~/.gitconfig
 [alias]
  migrations = "!f() { git diff --name-only $1..$2 db/migrate | tr -d '[A-Za-z/_.]'; }; f"

Executando o git migrations caraterística principal resultará na lista de versões de migração, que estão localizadas em caraterística e que não podem ser encontrados em mestre.

 $ [example/feature]: recurso mestre do git migrations
 20150605120955

Graças a esta informação, podemos facilmente reverter as alterações efectuadas na estrutura da base de dados antes de mudar para a base principal.

 $ [example/feature]: bundle exec rake db:migrate:down VERSION=20150605120955
 == 20150605120955 RemoveStatusColumnFromArticles: reverting ===================
 -- add_column(:articles, :status, :string)
   -> 0.0009s
 == 20150605120955 RemoveStatusColumnFromArticles: revertido (0.0045s) ==========

Outra coisa que devemos fazer depois de reverter a migração é restaurar o estado de um esquema de base de dados.

$ [example/feature]: git status
Recurso no ramo
Alterações não preparadas para confirmação:
 (use "git add ..." para atualizar o que será submetido)
 (use "git checkout -- ..." para descartar as alterações no diretório de trabalho)

modificado: db/schema.rb

nenhuma alteração adicionada ao commit (use "git add" e/ou "git commit -a")
$ [exemplo/caraterística]: git checkout db/schema.rb
$ [exemplo/caraterística]: git status
Recurso no ramo
nada para submeter, diretório de trabalho limpo

Agora podemos mudar facilmente para o mestre ramo.

O exemplo dado não é um problema complicado de resolver, mas deve ajudá-lo a perceber como é importante manter a estrutura de uma base de dados durante a mudança no contexto de trabalho.

Artigos relacionados

Ilustração de uma aplicação de cuidados de saúde para smartphone com um ícone de coração e um gráfico de saúde em ascensão, com o logótipo The Codest, representando soluções digitais de saúde e HealthTech.
Desenvolvimento de software

Softwares para o setor de saúde: Tipos, casos de uso

As ferramentas em que as organizações de cuidados de saúde confiam atualmente não se assemelham em nada às fichas de papel de há décadas atrás. O software de cuidados de saúde apoia agora os sistemas de saúde, os cuidados aos doentes e a prestação de cuidados de saúde modernos em...

OCODEST
Ilustração abstrata de um gráfico de barras em declínio com uma seta ascendente e uma moeda de ouro que simboliza a eficiência ou a poupança de custos. O logótipo The Codest aparece no canto superior esquerdo com o slogan "In Code We Trust" sobre um fundo cinzento claro
Desenvolvimento de software

Como dimensionar a sua equipa de desenvolvimento sem perder a qualidade do produto

Aumentar a sua equipa de desenvolvimento? Saiba como crescer sem sacrificar a qualidade do produto. Este guia cobre sinais de que é hora de escalar, estrutura da equipe, contratação, liderança e ferramentas - além de como o The Codest pode...

OCODEST
Desenvolvimento de software

Construir aplicações Web preparadas para o futuro: ideias da equipa de especialistas do The Codest

Descubra como o The Codest se destaca na criação de aplicações web escaláveis e interactivas com tecnologias de ponta, proporcionando experiências de utilizador perfeitas em todas as plataformas. Saiba como a nossa experiência impulsiona a transformação digital e o negócio...

OCODEST
Desenvolvimento de software

As 10 principais empresas de desenvolvimento de software sediadas na Letónia

Saiba mais sobre as principais empresas de desenvolvimento de software da Letónia e as suas soluções inovadoras no nosso último artigo. Descubra como estes líderes tecnológicos podem ajudar a elevar o seu negócio.

thecodest
Soluções para empresas e escalas

Fundamentos do desenvolvimento de software Java: Um Guia para Terceirizar com Sucesso

Explore este guia essencial sobre o desenvolvimento de software Java outsourcing com sucesso para aumentar a eficiência, aceder a conhecimentos especializados e impulsionar o sucesso do projeto com The Codest.

thecodest

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

    pt_PTPortuguese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek cs_CZCzech pt_PTPortuguese