My website uses PostgreSQL and its full-text search. For that to work, I need to execute some configuration queries in order to configure some full-text search extensions.
This is what I have written in a migration file to configure the development database:
class ConfigurePostgresql < ActiveRecord::Migration
def up
execute("CREATE EXTENSION unaccent;")
execute("ALTER TEXT SEARCH DICTIONARY unaccent (RULES='unaccent');")
execute("CREATE TEXT SEARCH CONFIGURATION es ( COPY = spanish );")
execute("ALTER TEXT SEARCH CONFIGURATION es
ALTER MAPPING FOR hword, hword_part, word
WITH unaccent, spanish_stem;")
end
end
This works perfectly in develpment.
Now I want to run some search tests, but when I execute my functional tests, I get an error saying that the extension is not configured:
ActiveRecord::StatementInvalid: PG::Error: ERROR: function unaccent(text) does not exist
Why is not it creating the extension? I have executed rake db:test:prepare
I have noticed that those execute lines are not included in my schema.rb. When I copy them inside the schema.rb, then all tests run correctly. Is there some way to make this work well without having to copy the executes everytime I make a migration?
My website uses PostgreSQL and its full-text search. For that to work, I need to execute some configuration queries in order to configure some full-text search extensions.
This is what I have written in a migration file to configure the development database:
class ConfigurePostgresql < ActiveRecord::Migration
def up
execute("CREATE EXTENSION unaccent;")
execute("ALTER TEXT SEARCH DICTIONARY unaccent (RULES='unaccent');")
execute("CREATE TEXT SEARCH CONFIGURATION es ( COPY = spanish );")
execute("ALTER TEXT SEARCH CONFIGURATION es
ALTER MAPPING FOR hword, hword_part, word
WITH unaccent, spanish_stem;")
end
end
This works perfectly in develpment.
Now I want to run some search tests, but when I execute my functional tests, I get an error saying that the extension is not configured:
ActiveRecord::StatementInvalid: PG::Error: ERROR: function unaccent(text) does not exist
Why is not it creating the extension? I have executed rake db:test:prepare
i think rake db:test:prepare uses schema.rb to create the test database. since you added raw sql, this is not added to schema.rb. you should use