pushtype / push_type

PushType is a modern, open source content management system for Ruby on Rails.
http://www.pushtype.org
Other
290 stars 32 forks source link

db:create raises ActiveRecord::NoDatabaseError #47

Open ryenski opened 6 years ago

ryenski commented 6 years ago

I'm unable to initialize a new database in an app when PushType is installed. This occurs with Rails 5.2; I haven't tried it yet with 5.1

Environment:

Steps to reproduce:

  1. Create fresh push_type install, following the installation instructions
  2. Create a new node using rails g push_type:node page body:wysiwyg
  3. Drop the database with rails db:drop. Database is dropped successfully.
  4. Create the database with rails db:create.

Expected behavior: Database is created

Actual behavior: ActiveRecord::NoDatabaseError is raised.

rails db:create
/Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb:688:in `rescue in connect': FATAL:  database "pushtype-test-development" does not exist
 (ActiveRecord::NoDatabaseError)
/Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb:688:in `rescue in connect': FATAL:  database "pushtype-test-development" does not exist
 (ActiveRecord::NoDatabaseError)
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb:684:in `connect'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb:215:in `initialize'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb:40:in `new'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb:40:in `postgresql_connection'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:809:in `new_connection'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:853:in `checkout_new_connection'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:832:in `try_to_checkout_new_connection'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:793:in `acquire_connection'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:521:in `checkout'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:380:in `connection'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:1008:in `retrieve_connection'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_handling.rb:118:in `retrieve_connection'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/connection_handling.rb:90:in `connection'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/model_schema.rb:324:in `table_exists?'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/closure_tree-6.6.0/lib/closure_tree/support_flags.rb:21:in `order_is_numeric?'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/closure_tree-6.6.0/lib/closure_tree/support.rb:28:in `initialize'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/closure_tree-6.6.0/lib/closure_tree/has_closure_tree.rb:16:in `new'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/closure_tree-6.6.0/lib/closure_tree/has_closure_tree.rb:16:in `has_closure_tree'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/push_type_core-0.11.2/app/models/push_type/node.rb:15:in `<class:Node>'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/push_type_core-0.11.2/app/models/push_type/node.rb:2:in `<module:PushType>'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/push_type_core-0.11.2/app/models/push_type/node.rb:1:in `<main>'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/bootsnap-1.2.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:82:in `load'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/bootsnap-1.2.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:82:in `load'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:468:in `block in load_file'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:653:in `new_constants_in'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:467:in `load_file'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:365:in `block in require_or_load'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:37:in `block in load_interlock'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies/interlock.rb:14:in `block in loading'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/concurrency/share_lock.rb:151:in `exclusive'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies/interlock.rb:13:in `loading'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:37:in `load_interlock'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:348:in `require_or_load'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:502:in `load_missing_constant'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/bootsnap-1.2.0/lib/bootsnap/load_path_cache/core_ext/active_support.rb:43:in `load_missing_constant'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:193:in `const_missing'
    from /Users/ryenski/Projects/pushtype-test/app/models/page.rb:1:in `<main>'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/bootsnap-1.2.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:82:in `load'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/bootsnap-1.2.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:82:in `load'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:468:in `block in load_file'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:653:in `new_constants_in'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:467:in `load_file'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:365:in `block in require_or_load'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:37:in `block in load_interlock'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies/interlock.rb:14:in `block in loading'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/concurrency/share_lock.rb:151:in `exclusive'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies/interlock.rb:13:in `loading'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:37:in `load_interlock'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:348:in `require_or_load'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:326:in `depend_on'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/bootsnap-1.2.0/lib/bootsnap/load_path_cache/core_ext/active_support.rb:59:in `depend_on'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:242:in `require_dependency'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/railties-5.2.0.rc1/lib/rails/engine.rb:478:in `block (2 levels) in eager_load!'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/railties-5.2.0.rc1/lib/rails/engine.rb:477:in `each'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/railties-5.2.0.rc1/lib/rails/engine.rb:477:in `block in eager_load!'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/railties-5.2.0.rc1/lib/rails/engine.rb:475:in `each'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/railties-5.2.0.rc1/lib/rails/engine.rb:475:in `eager_load!'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/push_type_core-0.11.2/lib/push_type/core/engine.rb:19:in `block in <class:Engine>'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:426:in `instance_exec'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:426:in `block in make_lambda'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:198:in `block (2 levels) in halting'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:606:in `block (2 levels) in default_terminator'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:605:in `catch'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:605:in `block in default_terminator'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:199:in `block in halting'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:513:in `block in invoke_before'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:513:in `each'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:513:in `invoke_before'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:131:in `run_callbacks'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/reloader.rb:89:in `prepare!'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/reloader.rb:46:in `block in <class:Reloader>'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:426:in `instance_exec'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:426:in `block in make_lambda'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:271:in `block in simple'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:517:in `block in invoke_after'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:517:in `each'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:517:in `invoke_after'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:133:in `run_callbacks'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/execution_wrapper.rb:110:in `run!'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/reloader.rb:115:in `run!'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/reloader.rb:53:in `block (2 levels) in reload!'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/reloader.rb:51:in `tap'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/reloader.rb:51:in `block in reload!'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/execution_wrapper.rb:87:in `wrap'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/activesupport-5.2.0.rc1/lib/active_support/reloader.rb:50:in `reload!'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/application.rb:164:in `serve'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/application.rb:141:in `block in run'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/application.rb:135:in `loop'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/application.rb:135:in `run'
    from /Users/ryenski/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/application/boot.rb:19:in `<top (required)>'
    from /Users/ryenski/.rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/ryenski/.rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from -e:1:in `<main>'
aaronrussell commented 6 years ago

I've just been away for a month so I haven't actually got a release out yet that is tested to work with 5.2, so maybe this is related, although that error looks a little odd. Seems to be trying to connect to the database as part of the create task, before it's even created the database 😛

First step is for me to get a 5.2 tested build released for you to use and see if this problem persists. If it does then there's something else going on.

Give me a few days and I'll let you know when a 5.2 build is ready.

ryenski commented 6 years ago

Yeah it is odd, sorry I didn't take the time to test with 5.1. Mainly just wondering if anyone else had run into that.

aaronrussell commented 6 years ago

A small update on this one. I've confirmed this bug does exists - it's not present in Rails 5.0.x or 5.1.x - so is something new in 5.2.

This part of the error stack suggests that it is the closure_tree gem that is checking the database causing this issue:

from /Users/ryenski/.gem/ruby/2.4.1/gems/activerecord-5.2.0.rc1/lib/active_record/model_schema.rb:324:in `table_exists?'
from /Users/ryenski/.gem/ruby/2.4.1/gems/closure_tree-6.6.0/lib/closure_tree/support_flags.rb:21:in `order_is_numeric?'
from /Users/ryenski/.gem/ruby/2.4.1/gems/closure_tree-6.6.0/lib/closure_tree/support.rb:28:in `initialize'
from /Users/ryenski/.gem/ruby/2.4.1/gems/closure_tree-6.6.0/lib/closure_tree/has_closure_tree.rb:16:in `new'
from /Users/ryenski/.gem/ruby/2.4.1/gems/closure_tree-6.6.0/lib/closure_tree/has_closure_tree.rb:16:in `has_closure_tree'

Ref this code at closure_tree:

https://github.com/ClosureTree/closure_tree/blob/2449029ecb7f287198154057bae88a912bfb5352/lib/closure_tree/support_flags.rb#L21

So I thought maybe this is an external issue so I created a plain old Rails app using closure tree (without PushType), but could not recreate the problem there.

So something specific about PushType is causing this to occur, but I'm a bit lost where to look next. I'll await the full Rails 5.2 release as maybe this is something that will get mopped up in the release candidates, but if not this will need deeper digging.