Travis ci,Rails和Postgresql - ERROR类型hstore不存在

时间:2014-03-02 11:53:58

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 travis-ci

我得到了:

PG::UndefinedObject: ERROR:  type "hstore" does not exist
LINE 1: ...arying(255), "finish" timestamp, "widget_locations" hstore) 

以下是我的Travis配置文件:

language: ruby
rvm:
  - 2.0.0
env:
  - DB=postgresql
script: 
  - RAILS_ENV=test bundle exec rake db:migrate --trace
  - bundle exec rake db:test:prepare
  - bundle exec rspec spec/
before_script:
  - cp config/database.travis.yml config/database.yml
  - psql -c 'create database virtual_test' -U postgres
  - psql virtual_test -c 'CREATE EXTENSION hstore' -U postgres
bundler_args: --binstubs=./bundler_stubs
before_install:
  - bundle update debugger-ruby_core_source

我还有以下迁移文件:

class SetupHstore < ActiveRecord::Migration
  def self.up
    execute 'CREATE EXTENSION IF NOT EXISTS hstore'
  end
  def self.down
    execute 'DROP EXTENSION IF EXISTS hstore'
  end
end

然而,无论如何都会产生错误。

这里有什么问题吗?

3 个答案:

答案 0 :(得分:1)

可能为时已晚,但遇到同样的问题。将hstore create更改为:

 - psql virtual_test -c 'CREATE EXTENSION IF NOT EXISTS hstore' -U postgres

并且rake db:test:准备这个:

 - RAILS_ENV=test bundle exec rake db:test:prepare

它很奇怪,但它有效,也可以帮助你。

答案 1 :(得分:0)

这可能是由于此答案中描述的search_path问题引起的:

https://stackoverflow.com/a/21910573/179316

答案 2 :(得分:0)

将您的before_script更改为:

before_script:
  - psql template1 -c 'create extension hstore;'
  - cp config/database.travis.yml config/database.yml
  - psql -c 'create database virtual_test' -U postgres

请注意,我们会在第一行创建扩展程序。