Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

import all task fails on rails 6 #971

Closed
estebanz01 opened this issue Jan 5, 2021 · 5 comments · Fixed by #1043
Closed

import all task fails on rails 6 #971

estebanz01 opened this issue Jan 5, 2021 · 5 comments · Fixed by #1043
Labels

Comments

@estebanz01
Copy link

estebanz01 commented Jan 5, 2021

Hello! I just created a small rails 6.0+ app and when I try to run the import:all task, it fails because it's not initializing the classes, apparently. Any ideas on how to solve it ?

$ bundle exec rails elasticsearch:import:all
[IMPORT] Loading models from: /home/ubuntu/rails/app/models
rails aborted!
NameError: uninitialized constant ApplicationRecord
/home/ubuntu/rails/app/models/project.rb:2:in `<top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/zeitwerk-2.4.1/lib/zeitwerk/kernel.rb:33:in `require'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/zeitwerk-2.4.1/lib/zeitwerk/kernel.rb:33:in `require'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/elasticsearch-rails-7.1.1/lib/elasticsearch/rails/tasks/import.rb:112:in `rescue in block (4 levels) in <top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/elasticsearch-rails-7.1.1/lib/elasticsearch/rails/tasks/import.rb:109:in `block (4 levels) in <top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/elasticsearch-rails-7.1.1/lib/elasticsearch/rails/tasks/import.rb:104:in `each'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/elasticsearch-rails-7.1.1/lib/elasticsearch/rails/tasks/import.rb:104:in `block (3 levels) in <top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/railties-6.0.3.4/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/railties-6.0.3.4/lib/rails/commands/rake/rake_command.rb:20:in `perform'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/railties-6.0.3.4/lib/rails/command.rb:48:in `invoke'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/railties-6.0.3.4/lib/rails/commands.rb:18:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'

Caused by:
NameError: uninitialized constant Project
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/activesupport-6.0.3.4/lib/active_support/inflector/methods.rb:282:in `const_get'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/activesupport-6.0.3.4/lib/active_support/inflector/methods.rb:282:in `block in constantize'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/activesupport-6.0.3.4/lib/active_support/inflector/methods.rb:280:in `each'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/activesupport-6.0.3.4/lib/active_support/inflector/methods.rb:280:in `inject'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/activesupport-6.0.3.4/lib/active_support/inflector/methods.rb:280:in `constantize'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/activesupport-6.0.3.4/lib/active_support/core_ext/string/inflections.rb:68:in `constantize'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/elasticsearch-rails-7.1.1/lib/elasticsearch/rails/tasks/import.rb:110:in `block (4 levels) in <top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/elasticsearch-rails-7.1.1/lib/elasticsearch/rails/tasks/import.rb:104:in `each'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/elasticsearch-rails-7.1.1/lib/elasticsearch/rails/tasks/import.rb:104:in `block (3 levels) in <top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/railties-6.0.3.4/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/railties-6.0.3.4/lib/rails/commands/rake/rake_command.rb:20:in `perform'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/railties-6.0.3.4/lib/rails/command.rb:48:in `invoke'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/railties-6.0.3.4/lib/rails/commands.rb:18:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => elasticsearch:import:all
(See full trace by running task with --trace)

The model structure is this:
app/models/project.rb

class Project < ApplicationRecord
  import ElasticConfig
end

app/models/concerns/elastic_config.rb

# frozen_string_literal: true

module ElasticConfig
  extend ActiveSupport::Concern

  included do
    # No elasticsearch integration in test environments.
    if not Rails.env.test?
      include Elasticsearch::Model
      include Elasticsearch::Model::Callbacks

      index_name "ark-#{Rails.env}-#{self.name.downcase}"
    end
  end
end
@estebanz01
Copy link
Author

well, it's the import task that is failing:

$ bundle exec rails elasticsearch:import:model CLASS="Project"
rails aborted!
NameError: uninitialized constant Project
(eval):1:in `block (3 levels) in <top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/elasticsearch-rails-7.1.1/lib/elasticsearch/rails/tasks/import.rb:66:in `eval'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/elasticsearch-rails-7.1.1/lib/elasticsearch/rails/tasks/import.rb:66:in `block (3 levels) in <top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/railties-6.0.3.4/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/railties-6.0.3.4/lib/rails/commands/rake/rake_command.rb:20:in `perform'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/railties-6.0.3.4/lib/rails/command.rb:48:in `invoke'
/home/ubuntu/.rvm/gems/ruby-2.7.2@ark/gems/railties-6.0.3.4/lib/rails/commands.rb:18:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => elasticsearch:import:model
(See full trace by running task with --trace)

@dbarrionuevo
Copy link

Have you guys tried bundle exec environment rails elasticsearch:import:model? I think environment must be present for the rake task to load the models properly

@estebanz01
Copy link
Author

@dbarrionuevo you mean RAILS_ENV=production bundle exec ... ? yeah, we tried that. Same result.

@dbarrionuevo
Copy link

No, I mean exactly like this, with the word environment: bundle exec environment rails elasticsearch:import:model CLASS='Project'

@estebanz01
Copy link
Author

That's not valid syntax. Normally what :environment means is that you can specify the rails env when needed via ENV var, instead of relying on the existing one @dbarrionuevo. Check this https://stackoverflow.com/questions/7044714/whats-the-environment-task-in-rake

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants