Como transferir dados perfeitamente entre vários ambientes e bancos de dados Ruby on Rails

Às vezes, você não pode simplesmente espalhar seu banco de dados Rails.
Isso pode ser devido à complexidade dos próprios dados, o que pode transformar a criação de seu arquivo seed.rb em um verdadeiro pesadelo.
Nesses casos, uma das soluções possíveis é processar todos os seus dados manualmente, por meio da IU do aplicativo da web, por exemplo.

No entanto, como você disponibilizaria os dados para seu aplicativo no ambiente de produção? Além disso, você pode não conseguir desligar o servidor de produção enquanto faz as alterações necessárias.

Felizmente, existe uma solução interessante para esse problema. É uma gema chamada ‘yaml_db’, que fornece um formato de despejo intermediário para seus dados (por padrão, ele produz e lê dados de db / data.yml) e dois comandos muito úteis.

Como usá-lo ?

Adicione esta linha ao seu gemfile:

gem yaml_db

Execute o bundler:

bundle

Para despejar seus dados:

bundle exec rake db:data:dump

Para carregar seus dados:
bundle exec rake db: data: load
Você pode especificar o ambiente usando a variável RAILS_ENV. O exemplo a seguir despeja dados do banco de dados de desenvolvimento e os envia para o banco de dados de produção:

RAILS_ENV=development bundle exec rake db:data:dump
RAILS_ENV
=production bundle exec rake db:data:load

Como observação lateral, descobri que esta joia é particularmente útil quando preciso transferir dados do meu host local (por exemplo) para uma instância do heroku. Supondo que você tenha despejado seu banco de dados, adicionado db / data.yml corretamente ao repositório e atualizado seu aplicativo heroku com a versão de código mais recente, tudo o que você precisa fazer é executar o seguinte comando:

heroku run bundle exec rake db:data:load

Observe que este método não redefine seus dados, mas mescla seu banco de dados real com o conteúdo data.yml. Tenha cuidado para não importá-lo mais de uma vez!

Você pode encontrar mais informações sobre yaml_db em seu repositório oficial do GitHub:

http://github.com/ludicast/yaml_db