Com certeza! Estranho, pois eu nunca tinha ouvido falar de Gemfile ou Gemfile.lock antes. Mas tendo 20 outros fóruns para repetir a instalação (suspiro), acontece que tudo começou com um problema diferente durante a instalação, onde as reclamações terminaram com uma recomendação para tentar excluir o Gemfile.lock:
Bundler encontrou requisitos conflitantes para a versão Ruby:
No Gemfile:
actionmailer (= 7.0.4.3) foi resolvido para 7.0.4.3, que depende de
Ruby (>= 2.7.0)
sassc-rails foi resolvido para 2.1.2, que depende de
sprockets-rails foi resolvido para 3.4.2, que depende de
Ruby (>= 2.5)
json foi resolvido para 2.6.3, que depende de
Ruby (>= 2.3)
json_schemer foi resolvido para 0.2.23, que depende de
ecma-re-validator (~> 0.3) foi resolvido para 0.4.0, que depende de
Ruby (>= 2.6, < 4.0)
rspec foi resolvido para 3.12.0, que depende de
rspec-expectations (~> 3.12.0) foi resolvido para 3.12.2, que depende de
diff-lcs (>= 1.2.0, < 2.0) foi resolvido para 1.5.0, que depende de
Ruby (>= 1.8)
web-push foi resolvido para 3.0.0, que depende de
Ruby (>= 3.0)
Versão Ruby atual:
Ruby (= 2.7.6)
Bundler não conseguiu encontrar versões compatíveis para o gem "hkdf":
No snapshot (Gemfile.lock):
hkdf (= 1.0.0)
No Gemfile:
web-push foi resolvido para 1.0.0, que depende de
hkdf (~> 0.2)
Excluir seu arquivo Gemfile.lock e executar `bundle install` reconstruirá seu
snapshot do zero, usando apenas
os gems em seu Gemfile, o que pode resolver o conflito.
Então, eu passei por esse erro inicial depois de remover o arquivo de lock conforme sugerido, e então encontrei o NameError: undefined method ‘call’ descrito anteriormente. Corrigi isso fixando a versão do redis. Então, tudo funcionou.
Portanto, meu script foi modificado para a) remover Gemfile.lock (devido ao erro citado acima) e b) alterar automaticamente o Gemfile para fixar o redis em 4.8.0. Tudo perfeito… pensei. Isso funcionou em três das 20 máquinas “idênticas”! As outras apresentaram este novo erro:
[discourse@in3020-discourse discourse]$ cd $INSTA; RAILS_ENV=production /usr/local/bin/bundle exec rake db:migrate # colocando um monte de coisas no banco de dados
rake aborted!
NoMethodError: undefined method `logger=' for Sidekiq:Module
Did you mean? logger
/var/discourse/config/initializers/100-sidekiq.rb:58:in `<main>'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:667:in `load'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:667:in `block in load_config_initializer'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.4.3/lib/active_support/notifications.rb:208:in `instrument'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:666:in `load_config_initializer'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:620:in `block (2 levels) in <class:Engine>'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:619:in `each'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:619:in `block in <class:Engine>'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:32:in `instance_exec'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:32:in `run'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:61:in `block in run_initializers'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:50:in `each'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:50:in `tsort_each_child'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:60:in `run_initializers'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/application.rb:372:in `initialize!'
/var/discourse/config/environment.rb:7:in `<main>'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.6.7/lib/zeitwerk/kernel.rb:38:in `require'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/application.rb:348:in `require_environment!'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/application.rb:511:in `block in run_tasks_blocks'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/cli.rb:486:in `exec'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/cli.rb:31:in `dispatch'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/cli.rb:25:in `start'
/usr/local/share/gems/gems/bundler-2.3.26/exe/bundle:48:in `block in <top (required)>'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/friendly_errors.rb:120:in `with_friendly_errors'
/usr/local/share/gems/gems/bundler-2.3.26/exe/bundle:36:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => db:migrate => db:load_config => environment
(See full trace by running task with --trace)
O que foi realmente, realmente estranho porque os arquivos /var/discourse/config/initializers/100-sidekiq.rb eram idênticos em todas as máquinas e certamente não continham ‘logger=’, mas uma declaração ‘logger = …’.
Finalmente descobri que nas máquinas onde funcionou, /usr/local/bin/bundle era a versão 2.3.20, não 2.3.26 como nas máquinas onde falhou. Então, em resumo, adicionar isso antes do comando de instalação para discourse fez o truque para mim (não foi suficiente fazer o pegging do bundler em 2.3.20 comandos após a instalação do bundler do discourse, teve que ser antes):
rm Gemfile.lock
perl -pi.bak -e 's/gem "redis"/gem "redis","4.8.0"/' Gemfile
/usr/bin/gem uninstall bundler -v 2.3.26
/usr/bin/gem install bundler -v 2.3.20
RAILS_ENV=production /usr/local/bin/bundle install
RAILS_ENV=production /usr/local/bin/bundle exec rake db:migrate
RAILS_ENV=production /usr/local/bin/bundle exec rake assets:precompile
Por que diabos algumas daquelas máquinas tinham bundler 2.3.26 e outras tinham 2.3.20 eu não faço ideia… mas provavelmente não é culpa sua
.