PNixx / clickhouse-activerecord

A Ruby database ActiveRecord driver for ClickHouse

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Migrate broke in Rails v7.1.1

amree opened this issue · comments

A simple install the gem will break the migrate command

To reproduce:

> rails --version
Rails 7.1.1

> ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-darwin22]

> rails new ch --api

> rails db:create db:migrate
Created database 'storage/development.sqlite3'
Created database 'storage/test.sqlite3'

> bundle add clickhouse-activerecord

> rails db:migrate

❯ rails db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Execute db:migrate
bin/rails aborted!
ArgumentError: wrong number of arguments (given 1, expected 0) (ArgumentError)
/Users/amree/.gem/ruby/3.2.2/gems/clickhouse-activerecord-0.6.0/lib/core_extensions/arel/nodes/select_statement.rb:7:in `initialize'
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/arel/select_manager.rb:10:in `new'
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/arel/select_manager.rb:10:in `initialize'
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/active_record/internal_metadata.rb:141:in `new'
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/active_record/internal_metadata.rb:141:in `select_entry'
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/active_record/internal_metadata.rb:99:in `update_or_create_entry'
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/active_record/internal_metadata.rb:42:in `[]='
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/active_record/migration.rb:1506:in `record_environment'
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/active_record/migration.rb:1498:in `migrate_without_lock'
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/active_record/migration.rb:1446:in `migrate'
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/active_record/migration.rb:1270:in `up'
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/active_record/migration.rb:1245:in `migrate'
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/active_record/tasks/database_tasks.rb:243:in `migrate'
/Users/amree/.gem/ruby/3.2.2/gems/activerecord-7.1.1/lib/active_record/railties/databases.rake:93:in `block (2 levels) in <main>'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/task.rb:281:in `block in execute'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/task.rb:281:in `each'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/task.rb:281:in `execute'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/task.rb:199:in `synchronize'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/task.rb:199:in `invoke_with_call_chain'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/task.rb:188:in `invoke'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/application.rb:182:in `invoke_task'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/application.rb:138:in `block (2 levels) in top_level'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/application.rb:138:in `each'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/application.rb:138:in `block in top_level'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/application.rb:147:in `run_with_threads'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/application.rb:132:in `top_level'
/Users/amree/.gem/ruby/3.2.2/gems/railties-7.1.1/lib/rails/commands/rake/rake_command.rb:27:in `block (2 levels) in perform'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/application.rb:208:in `standard_exception_handling'
/Users/amree/.gem/ruby/3.2.2/gems/railties-7.1.1/lib/rails/commands/rake/rake_command.rb:27:in `block in perform'
/Users/amree/.gem/ruby/3.2.2/gems/railties-7.1.1/lib/rails/commands/rake/rake_command.rb:44:in `block in with_rake'
/Users/amree/.gem/ruby/3.2.2/gems/rake-13.1.0/lib/rake/rake_module.rb:59:in `with_application'
/Users/amree/.gem/ruby/3.2.2/gems/railties-7.1.1/lib/rails/commands/rake/rake_command.rb:41:in `with_rake'
/Users/amree/.gem/ruby/3.2.2/gems/railties-7.1.1/lib/rails/commands/rake/rake_command.rb:20:in `perform'
/Users/amree/.gem/ruby/3.2.2/gems/railties-7.1.1/lib/rails/command.rb:156:in `invoke_rake'
/Users/amree/.gem/ruby/3.2.2/gems/railties-7.1.1/lib/rails/command.rb:73:in `block in invoke'
/Users/amree/.gem/ruby/3.2.2/gems/railties-7.1.1/lib/rails/command.rb:149:in `with_argv'
/Users/amree/.gem/ruby/3.2.2/gems/railties-7.1.1/lib/rails/command.rb:69:in `invoke'
/Users/amree/.gem/ruby/3.2.2/gems/railties-7.1.1/lib/rails/commands.rb:18:in `<main>'
<internal:/Users/amree/.rubies/ruby-3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
<internal:/Users/amree/.rubies/ruby-3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
/Users/amree/.gem/ruby/3.2.2/gems/bootsnap-1.17.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate

This problem only in ruby 3+

@PNixx It sems to be happening with Ruby v2.7.6 as well

> rails db:migrate --trace
/Users/amree/.rubies/ruby-2.7.6/lib/ruby/2.7.0/net/protocol.rb:66: warning: already initialized constant Net::ProtocRetryError
/Users/amree/.gem/ruby/2.7.6/gems/net-protocol-0.2.1/lib/net/protocol.rb:68: warning: previous definition of ProtocRetryError was here
/Users/amree/.rubies/ruby-2.7.6/lib/ruby/2.7.0/net/protocol.rb:206: warning: already initialized constant Net::BufferedIO::BUFSIZE
/Users/amree/.gem/ruby/2.7.6/gems/net-protocol-0.2.1/lib/net/protocol.rb:214: warning: previous definition of BUFSIZE was here
/Users/amree/.rubies/ruby-2.7.6/lib/ruby/2.7.0/net/protocol.rb:503: warning: already initialized constant Net::NetPrivate::Socket
/Users/amree/.gem/ruby/2.7.6/gems/net-protocol-0.2.1/lib/net/protocol.rb:541: warning: previous definition of Socket was here
** Invoke db:migrate (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Execute db:migrate
rails aborted!
ArgumentError: wrong number of arguments (given 1, expected 0)
/Users/amree/.gem/ruby/2.7.6/gems/clickhouse-activerecord-0.6.0/lib/core_extensions/arel/nodes/select_statement.rb:7:in `initialize'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/arel/select_manager.rb:10:in `new'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/arel/select_manager.rb:10:in `initialize'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation/query_methods.rb:1377:in `new'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation/query_methods.rb:1377:in `build_arel'
/Users/amree/.gem/ruby/2.7.6/gems/clickhouse-activerecord-0.6.0/lib/core_extensions/active_record/relation.rb:36:in `build_arel'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation/query_methods.rb:1301:in `arel'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation.rb:942:in `block in exec_main_query'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation.rb:962:in `skip_query_cache_if_necessary'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation.rb:928:in `exec_main_query'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation.rb:914:in `block in exec_queries'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation.rb:962:in `skip_query_cache_if_necessary'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation.rb:908:in `exec_queries'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation.rb:695:in `load'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation.rb:250:in `records'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation/finder_methods.rb:520:in `find_take'
/Users/amree/.gem/ruby/2.7.6/gems/activerecord-7.0.8/lib/active_record/relation/finder_methods.rb:98:in `take'

It seems to be working fine on Ruby v3 with Rails v6.1.7.6

> rails db:migrate --trace
Running via Spring preloader in process 32060
** Invoke db:migrate (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Execute db:migrate
** Invoke db:_dump (first_time)
** Execute db:_dump
** Invoke db:schema:dump (first_time)
** Invoke db:load_config
** Execute db:schema:dump

> ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-darwin22]

> rails --version
Rails 6.1.7.6

For Rails 7+ you need use branch rails_7

@PNixx It worked, but I think it will only work for Rails v7.1 and not Rails v7 due to:

spec.add_runtime_dependency 'activerecord', '>= 7.1'

Is it possible to relax it to v7.0 if there's no problem?

No. Rails 7.1 has critical architecture changes.

@PNixx I guess there's no support for Rails v7.0.x for now?

Only '>= 7.1'

Thanks for all of the replies @PNixx

I'll close this issue.

Sorry, but one last question. Are you planning to support Rails v7.0 as well in the future?