我正在使用citext
扩展程序,因为Postgres的缺点是没有全局功能来允许不区分大小写的搜索。
然而,在我运行的Rails 3.2应用程序中:
rake db:test:prepare
我的对象是使用text
数据类型创建的,而不是citext
。如何强制执行上面的rake命令来创建数据库并添加我的应用程序所需的扩展,以便进行那些刚刚应该被烘焙的搜索?
答案 0 :(得分:1)
您需要将citext扩展名添加到测试数据库中。不幸的是,在db:test的标准实现中:准备删除并重新创建数据库,因此扩展已经消失。
我发现自己处于相同的情况,并且不得不求助于我自己的实现覆盖db:test:purge(在准备之前调用),因此它不会丢弃数据库而只会丢弃对象(基于的解决方案) '按用户名删除')。
使用rake任务代码更新: 所以我的rake任务看起来像这样。我把它放在lib / tasks / overrides / database.rake上;但这取决于你。
namespace :db do
namespace :test do
task :purge => []
Rake::Task["purge"].clear
# desc overrides default task to drop all objects in database instead of the db itself (only postgresql)
task :purge => [:environment, :load_config] do
abcs = ActiveRecord::Base.configurations
case abcs['test']['adapter']
when /postgresql/
# original implementation commented out
#ActiveRecord::Base.clear_active_connections!
#drop_database(abcs['test'])
#create_database(abcs['test'])
drop_database_objects(abcs['test'])
end
end
end
end
def drop_database_objects(config)
case config['adapter']
when /postgresql/
ActiveRecord::Base.establish_connection(config)
sql = "DROP OWNED BY #{config['username']}"
ActiveRecord::Base.connection.execute sql
end
end
我省略了没有改变的部分,但你可以在database.rake看到原文。 注意:我发现Postgresql 9.2.2对DROP OWNED BY有问题,你可以使用9.2.1和9.2.3;它只是一个版本。