Dica: Migrations com comandos SQL e problemas com testes no Rails
Se você utiliza o método execute em suas migrations para rodar comandos SQL na criação de sua base de dados, cuidado ao rodar os testes de sua aplicação. Na criação da base de testes, o Rails não roda as migrations, ele utiliza o script contido no arquivo schema.rb. O problema é que, ao fazer o dump da base para esse arquivo, o Rails não utiliza os comandos SQL definidos nas migrations e sim os métodos da DSL de manipulação de estrutura e dados (como add_index, create_table, add_column etc).
Devido a isso, se você utilizou alguma particularidade do sistema gerenciador de banco de dados que utiliza ao definir sua base, muito provavelmente ocorrerá um erro no banco de dados ao tentar rodar os testes de sua aplicação.
Exemplo:
Em uma migration:
(...) create_table :tests do |t| t.column :test_column, :text end execute("ALTER TABLE test ADD INDEX test_index(test_column(200));") (...)
No MySQL é necessário definir um comprimento para Ãndices em colunas dos tipos TEXT e BLOB e, como não há essa opção no método add_index, utilizamos um comando SQL. No entanto, no arquivo schema.rb, a criação do Ãndice é feita da seguinte maneira:
add_index "tests", ["test_column"], :name => "test_index"
E isso causa um erro no MySQL. Para corrigÃ-lo, procure em seu arquivo environment.rb pela seguinte linha:
config.active_record.schema_format = :sql
Por padrão ela vem comentada. Retire o comentário para fazer com que o banco de dados de testes seja criado diretamente com comandos SQL. Caso não a encontre comentada, adicione-a dentro do bloco Rails::Initializer.run.
Comments
One Response to “Dica: Migrations com comandos SQL e problemas com testes no Rails”
Leave a Reply
[...] Dica: Migrations com comandos SQL e problemas com testes no Rails [...]