2017-05-24 1 views
1

J'essaie d'utiliser CI d'Heroku pour exécuter les tests de mon application Rails, mais cela pose un problème lorsque je tente de charger mon fichier structure.sql.CI Heroku w/Extensions Postgresql

-----> Preparing test database 
     Running: rake db:schema:load_if_ruby 
     db:schema:load_if_ruby completed (3.24s) 
     Running: rake db:structure:load_if_sql 
     psql:/app/db/structure.sql:28: ERROR: must be owner of extension plpgsql 
     rake aborted! 
     failed to execute: 
     psql -v ON_ERROR_STOP=1 -q -f /app/db/structure.sql d767koa0m1kne1 
     Please check the output above for any errors and make sure that `psql` is installed in your PATH and has proper permissions. 
     /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.1/lib/active_record/tasks/postgresql_database_tasks.rb:108:in `run_cmd' 
     /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.1/lib/active_record/tasks/postgresql_database_tasks.rb:80:in `structure_load' 
     /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.1/lib/active_record/tasks/database_tasks.rb:223:in `structure_load' 
     /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.1/lib/active_record/tasks/database_tasks.rb:236:in `load_schema' 
     /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.1/lib/active_record/tasks/database_tasks.rb:255:in `block in load_schema_current' 
     /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.1/lib/active_record/tasks/database_tasks.rb:304:in `block in each_current_configuration' 
     /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.1/lib/active_record/tasks/database_tasks.rb:303:in `each' 
     /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.1/lib/active_record/tasks/database_tasks.rb:303:in `each_current_configuration' 
     /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.1/lib/active_record/tasks/database_tasks.rb:254:in `load_schema_current' 
     /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.1/lib/active_record/railties/databases.rake:290:in `block (3 levels) in <top (required)>' 
     /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.1/lib/active_record/railties/databases.rake:294:in `block (3 levels) in <top (required)>' 
     /app/vendor/bundle/ruby/2.4.0/gems/rake-12.0.0/exe/rake:27:in `<top (required)>' 
     Tasks: TOP => db:structure:load 
     (See full trace by running task with --trace) 
! 
!  Could not prepare database for test 
! 

La ligne concernée est ici:

psql:/app/db/structure.sql:28: ERROR: must be owner of extension plpgsql rake aborted!

Structure.sql contient cette ligne:

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; 

Toutes les idées sur la façon d'obtenir ce travail sur le CI de Heroku?

Répondre

1

Nous avons fini remplaçant db:structure:dump pour supprimer les COMMENT ON ... déclarations:

namespace :db do 
    namespace :structure do 
    task dump: [:environment, :load_config] do 
     filename = ENV["SCHEMA"] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "structure.sql") 
     sql = File.read(filename).each_line.grep_v(/\ACOMMENT ON EXTENSION.+/).join 

     File.write(filename, sql) 
    end 
    end 
end 
+0

Dans quel fichier mettez-vous cette tâche? 'project.rake'? – user2954587

1

Si la solution de Kyle ne suffit pas et les erreurs ne sont pas causés uniquement par des commentaires sur les extensions, mais les installations d'extensions réelles, vous pouvez toujours aller la dure et ajoutez ceci à un initialiseur:

# This is a temporary workaround for the Rails issue #29049. 
# It could be safely removed when the PR #29110 got merged and released 
# to use instead IGNORE_PG_LOAD_ERRORS=1. 

module ActiveRecord 
    module Tasks 
    class PostgreSQLDatabaseTasks 
     ON_ERROR_STOP_1 = 'ON_ERROR_STOP=0'.freeze 
    end 
    end 
end 

note: ce n'est pas spécifique à Heroku, mais un plus large Rails 5.1 question