activerecord-postgis-adapter: # <ArgumentError: неверное количество аргументов (3 для 4)> - PullRequest
0 голосов
/ 06 сентября 2018

Описание проблемы

Я пытаюсь перенести существующее приложение Ruby on Rails (Ruby 2.3.3p222, Rails 5.0.0.1), разработанное бывшим коллегой, на JRuby. Приложение работает без каких-либо проблем с использованием вышеупомянутой версии Ruby. Вы можете найти оригинальный Gemfile как Gemfile Ruby в приложении.

Поскольку я новичок в Ruby и не уверен, что не так, я предоставляю все изменения, которые я сделал до сих пор (см. Gemfile JRuby в приложении к полученному Gemfile), чтобы перенести приложение на JRuby. .

1. Замена gem 'pg'

Я заменил gem 'pg', '~> 0.21.0' на

gem 'pg', '0.21.0', :platform => :jruby, :git => 'git://github.com/headius/jruby-pg.git', :branch => :master

как указано на странице Github из jruby-pg. После запуска bundle install я запустил приложение, которое показало ошибку:

LoadError: no such file to load -- active_record/connection_adapters/jdbcpostgresql_adapter

2. Адаптация gem 'activerecord-postgis-adapter'

Чтобы избавиться от последней ошибки, я добавил в строку gem 'activerecord-postgis-adapter' следующее:

gem 'activerecord-jdbcpostgresql-adapter', '~> 1.3.9'
gem 'ffi-geos'

как предложено на странице Github из activerecord-postgis-adapter. Опять после bundler install и запуска я получаю ошибку:

Bundler::GemRequireError: There was an error while trying to load the gem 'activerecord-postgis-adapter'.
Gem Load Error is: uninitialized constant ActiveRecord::ConnectionAdapters::Column::Format

Подход к решению

Я попытался следовать подсказке, приведенной в этой записи , и заменил строку gem 'activerecord-jdbcpostgresql-adapter на

gem 'activerecord-jdbcpostgresql-adapter', :git => "git://github.com/jruby/activerecord-jdbc-adapter.git",
:branch => "50-stable", :platform => :jruby

Из-за следующих ошибок я удалил gem ffi-geos и ошибки исчезли:

Error:[rake --tasks] C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/ffi-geos-1.2.1/lib/ffi-geos.rb:9: warning: already initialized constant GEOS_BASE
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/ffi-geos-1.2.1/lib/ffi-geos.rb:90: warning: already initialized constant DimensionTypes
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/ffi-geos-1.2.1/lib/ffi-geos.rb:99: warning: already initialized constant ByteOrders
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/ffi-geos-1.2.1/lib/ffi-geos.rb:104: warning: already initialized constant BufferCapStyles
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/ffi-geos-1.2.1/lib/ffi-geos.rb:110: warning: already initialized constant BufferJoinStyles
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/ffi-geos-1.2.1/lib/ffi-geos.rb:116: warning: already initialized constant ValidFlags
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/ffi-geos-1.2.1/lib/ffi-geos.rb:120: warning: already initialized constant RelateBoundaryNodeRules
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/ffi-geos-1.2.1/lib/ffi-geos.rb:128: warning: already initialized constant GeometryTypes
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/ffi-geos-1.2.1/lib/ffi-geos.rb:139: warning: already initialized constant PrecisionOptions
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/ffi-geos-1.2.1/lib/ffi-geos.rb:786: warning: already initialized constant FFI_LAYOUT
rake aborted!
LoadError: Couldn't load the GEOS CAPI library.
... stacktrace ...

Наконец-то я смог запустить приложение, однако отправка запроса POST возвращает следующую ошибку

2018-09-06 14:08:17 +0200: Rack app error handling request { POST /tripplanner/api/trip_proposals }

#<ArgumentError: wrong number of arguments (3 for 4)>
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/activerecord-postgis-adapter-4.0.2/lib/active_record/connection_adapters/postgis_adapter.rb:12:in `initialize'
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/bundler/gems/activerecord-jdbc-adapter-9dbcf040715b/lib/arjdbc/jdbc/callbacks.rb:12:in `new'
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/bundler/gems/activerecord-jdbc-adapter-9dbcf040715b/lib/arjdbc/jdbc/connection_methods.rb:8:in `jdbc_connection'
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/bundler/gems/activerecord-jdbc-adapter-9dbcf040715b/lib/arjdbc/postgresql/connection_methods.rb:64:in `postgresql_connection'
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/activerecord-postgis-adapter-4.0.2/lib/active_record/connection_adapters/postgis/create_connection.rb:13:in `postgis_connection'
C:/jruby/v9.1.17.0/lib/ruby/gems/shared/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:721:in `new_connection'
... stacktrace ...

Я могу найти только эту проблему в activerecord-jdbc-adapter, но она не указывает никакого решения. Поскольку у меня нет плана относительно дальнейших действий, есть ли у вас представление о причине ошибки? Большое спасибо!


Приложение

Информация о версии

Машина для разработки работает под управлением Windows 10 (x64) и использует RubyMine 2018.2.1 в качестве IDE. Параллельно с JRuby, Ruby 2.3.3 все еще установлен (используя RailsInstaller ). Однако среда IDE настроена на использование JRuby в качестве SDK проекта.

  • Java JDK 1.8.0_172
  • JRuby 9.1.17.0-p0
  • PostgreSQL x64 9.5 с PostGIS 2.3.5 r16110, GEOS 3.6.2-CAPI-1.10.2 4d2925d
  • Пума 3.6.0

Gemfiles

Gemfile Ruby

source 'https://rubygems.org'

gem 'rails', '~> 5.0.0', '>= 5.0.0.1'

# Use postgresql as the database for Active Record
gem 'pg', '~> 0.21.0'

# Use Puma as the app server
gem 'puma', '~> 3.0'
gem 'config'
gem 'whenever', :require => false

# gems for database handling
gem 'activerecord-postgis-adapter'

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platform: :mri
end

group :development do
  gem 'listen', '~> 3.0.5'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'

  gem 'mina'
  gem 'mina-puma', github: 'untitledkingdom/mina-puma'
  gem 'mina-whenever'
end

group :test do
  gem 'whenever-test'
  gem 'mocha'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
gem 'active_model_serializers'
gem 'httparty'
gem 'polylines'

Gemfile JRuby

source 'https://rubygems.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.0.0', '>= 5.0.0.1'

# Use postgresql as the database for Active Record
gem 'pg', '0.21.0', :platform => :jruby, :git => 'git://github.com/headius/jruby-pg.git', :branch => :master

# Use Puma as the app server
gem 'puma', '~> 3.0'
gem 'config'
gem 'whenever', :require => false

# gems for database handling
gem 'activerecord-postgis-adapter'
#gem 'activerecord-jdbcpostgresql-adapter', '~> 1.3.9'
gem 'activerecord-jdbcpostgresql-adapter', :git => "git://github.com/jruby/activerecord-jdbc-adapter.git",
    :branch => "50-stable", :platform => :jruby
#gem 'ffi-geos'

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platform: :mri
end

group :development do
  gem 'listen', '~> 3.0.5'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'

  gem 'mina'
  gem 'mina-puma', github: 'untitledkingdom/mina-puma'
  gem 'mina-whenever'
end

group :test do
  gem 'whenever-test'
  gem 'mocha'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
gem 'active_model_serializers'
gem 'httparty'
gem 'polylines'

1 Ответ

0 голосов
/ 07 сентября 2018

Проблема была связана с гемом activerecord-jdbc-adapter и могла быть решена в проблема # 891 . Поскольку все изменения были сделаны в ветке 50-stable, никаких изменений в Gemfile не требовалось. Приложение теперь работает в JRuby: -)

...