Home > Net >  ElasticSearch deployment issue: NameError: uninitialized constant Elasticsearch
ElasticSearch deployment issue: NameError: uninitialized constant Elasticsearch

Time:03-04

I am deploying my rails app via AWS. During the deployment I get the following error.

Automatic configuration of the sidekiq middleware is no longer done. Please see: https://github.com/mhenrixon/sidekiq-unique-jobs/blob/master/README.md#add-the-middleware

This version deprecated the following sidekiq_options

  • sidekiq_options lock_args: :method_name

It is now configured with:

  • sidekiq_options lock_args_method: :method_name

This is also true for Sidekiq.default_worker_options

We also deprecated the global configuration options:

  • default_lock_ttl
  • default_lock_ttl=
  • default_lock_timeout
  • default_lock_timeout=

The new methods to use are:

  • lock_ttl
  • lock_ttl=
  • lock_timeout
  • lock_timeout= Removing intermediate container 058b1862fa23 ---> d58eac1f9787 Step 22/28 : COPY --chown=app:app . . ---> f91e7b24a602 Step 23/28 : RUN bundle exec rake assets:precompile ---> Running in 49531771f9ca rake aborted! NameError: uninitialized constant Elasticsearch /home/app/webapp/config/initializers/elasticsearch.rb:11:in <main>' /usr/local/rvm/gems/ruby-2.6.8/gems/bootsnap-1.10.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:48:in load' /usr/local/rvm/gems/ruby-2.6.8/gems/bootsnap-1.10.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:48:in load' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/engine.rb:666:in block in load_config_initializer' /usr/local/rvm/gems/ruby-2.6.8/gems/activesupport-6.0.4.6/lib/active_support/notifications.rb:182:in instrument' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/engine.rb:665:in load_config_initializer' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/engine.rb:625:in block (2 levels) in <class:Engine>' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/engine.rb:624:in each' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/engine.rb:624:in block in <class:Engine>' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/initializable.rb:32:in instance_exec' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/initializable.rb:32:in run' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/initializable.rb:61:in block in run_initializers' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/initializable.rb:50:in each' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/initializable.rb:50:in tsort_each_child' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/initializable.rb:60:in run_initializers' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/application.rb:363:in initialize!' /home/app/webapp/config/environment.rb:5:in <main>' /usr/local/rvm/gems/ruby-2.6.8/gems/bootsnap-1.10.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in require' /usr/local/rvm/gems/ruby-2.6.8/gems/bootsnap-1.10.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in require' /usr/local/rvm/gems/ruby-2.6.8/gems/zeitwerk-2.5.4/lib/zeitwerk/kernel.rb:35:in require' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/application.rb:339:in require_environment!' /usr/local/rvm/gems/ruby-2.6.8/gems/railties-6.0.4.6/lib/rails/application.rb:523:in block in run_tasks_blocks' /usr/local/rvm/gems/ruby-2.6.8/gems/sprockets-rails-3.4.2/lib/sprockets/rails/task.rb:61:in `block (2 levels) in define' Tasks: TOP => environment (See full trace by running task with --trace) The command '/bin/sh -c bundle exec rake assets:precompile' returned a non-zero code: 1

[Container] 2022/02/23 11:37:32 Command did not exit successfully docker build --build-arg RAILS_ENV --build-arg DATABASE_URL --build-arg REDIS_URL --build-arg SECRET_KEY_BASE -t $REPOSITORY_URI:latest . exit status 1 [Container] 2022/02/23 11:37:32 Phase complete: BUILD State: FAILED [Container] 2022/02/23 11:37:32 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: docker build --build-arg RAILS_ENV --build-arg DATABASE_URL --build-arg REDIS_URL --build-arg SECRET_KEY_BASE -t $REPOSITORY_URI:latest .. Reason: exit status 1 [Container] 2022/02/23 11:37:32 Entering phase POST_BUILD [Container] 2022/02/23 11:37:32 Running command echo Build completed on date Build completed on Wed Feb 23 11:37:32 UTC 2022

[Container] 2022/02/23 11:37:32 Running command echo Pushing the Docker images... Pushing the Docker images...

[Container] 2022/02/23 11:37:32 Running command docker push $REPOSITORY_URI:latest The push refers to repository [413249046650.dkr.ecr.eu-west-1.amazonaws.com/legitimate-development] An image does not exist locally with the tag: 413249046650.dkr.ecr.eu-west-1.amazonaws.com/legitimate-development

[Container] 2022/02/23 11:37:32 Command did not exit successfully docker push $REPOSITORY_URI:latest exit status 1 [Container] 2022/02/23 11:37:32 Phase complete: POST_BUILD State: FAILED [Container] 2022/02/23 11:37:32 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: docker push $REPOSITORY_URI:latest. Reason: exit status 1 [Container] 2022/02/23 11:37:32 Expanding base directory path: . [Container] 2022/02/23 11:37:32 Assembling file list [Container] 2022/02/23 11:37:32 Expanding . [Container] 2022/02/23 11:37:32 Expanding file paths for base directory . [Container] 2022/02/23 11:37:32 Assembling file list [Container] 2022/02/23 11:37:32 Expanding imagedefinitions.json [Container] 2022/02/23 11:37:32 Skipping invalid file path imagedefinitions.json [Container] 2022/02/23 11:37:32 Expanding imagedefinitions2.json [Container] 2022/02/23 11:37:32 Skipping invalid file path imagedefinitions2.json [Container] 2022/02/23 11:37:32 Phase complete: UPLOAD_ARTIFACTS State: FAILED [Container] 2022/02/23 11:37:32 Phase context status code: CLIENT_ERROR Message: no matching artifact paths found

The file referenced in the line below the error is:

if Rails.env == 'production'
  url = ENV["ELASTICSEARCH_URL"]
  transport_options = { request: { timeout: 250 } }
  options = { hosts: url, retry_on_failure: true, transport_options: transport_options }
  Searchkick.aws_credentials = {
    access_key_id: ENV["AWS_ACCESS_KEY_ID"],
    secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
    region: "eu-west-1"
  }
  
  Searchkick.client = Elasticsearch::Client.new(options)
end

Can someone please help me to understand what this error means.

Thanks in advance for any help.

Gerard

CodePudding user response:

That file uses the Elasticsearch constant in Elasticsearch::Client, but Ruby does not know it.

Do you have the elasticsearch gem in the Gemfile in a group that is included in production? If yes, does it have require: false?

  • Related