Certamente! Strano, dato che non avevo mai sentito parlare né di Gemfile né di Gemfile.lock prima. Ma avendo altri 20 forum su cui ripetere l’installazione (sospiro), si scopre che tutto è iniziato con un problema diverso durante l’installazione, dove le lamentele si sono concluse con la raccomandazione di provare a eliminare Gemfile.lock:
Bundler ha trovato requisiti contrastanti per la versione di Ruby:
In Gemfile:
actionmailer (= 7.0.4.3) è stato risolto in 7.0.4.3, che dipende da
Ruby (>= 2.7.0)
sassc-rails è stato risolto in 2.1.2, che dipende da
sprockets-rails è stato risolto in 3.4.2, che dipende da
Ruby (>= 2.5)
json è stato risolto in 2.6.3, che dipende da
Ruby (>= 2.3)
json_schemer è stato risolto in 0.2.23, che dipende da
ecma-re-validator (~> 0.3) è stato risolto in 0.4.0, che dipende da
Ruby (>= 2.6, < 4.0)
rspec è stato risolto in 3.12.0, che dipende da
rspec-expectations (~> 3.12.0) è stato risolto in 3.12.2, che dipende da
diff-lcs (>= 1.2.0, < 2.0) è stato risolto in 1.5.0, che dipende da
Ruby (>= 1.8)
web-push è stato risolto in 3.0.0, che dipende da
Ruby (>= 3.0)
Versione Ruby corrente:
Ruby (= 2.7.6)
Bundler non è riuscito a trovare versioni compatibili per la gemma "hkdf":
In snapshot (Gemfile.lock):
hkdf (= 1.0.0)
In Gemfile:
web-push è stato risolto in 1.0.0, che dipende da
hkdf (~> 0.2)
Eliminare il file Gemfile.lock ed eseguire `bundle install` ricostruirà il tuo
snapshot da zero, utilizzando solo
le gemme nel tuo Gemfile, il che potrebbe risolvere il conflitto.
Quindi, ho superato quell’errore iniziale dopo aver rimosso il file di blocco come suggerito, poi mi sono imbattuto nel NameError: undefined method ‘call’ descritto in precedenza. L’ho risolto fissando la versione di redis. Poi, tutto ha funzionato.
Quindi, il mio script è stato modificato per a) rimuovere Gemfile.lock (a causa dell’errore citato sopra) e b) modificare automaticamente Gemfile per fissare redis a 4.8.0. Tutto liscio… pensavo. Questo ha funzionato su tre delle 20 macchine “identiche”! Le altre hanno dato questo nuovo errore:
[discourse@in3020-discourse discourse]$ cd $INSTA; RAILS_ENV=production /usr/local/bin/bundle exec rake db:migrate # stuffing a lot of stuff into the database
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)
Il che era davvero, davvero strano perché i file /var/discourse/config/initializers/100-sidekiq.rb erano identici su tutte le macchine, e certamente non contenevano ‘logger=’, ma un’istruzione ‘logger = …’.
Alla fine ho capito che sulle macchine dove ha funzionato, /usr/local/bin/bundle era la versione 2.3.20, non 2.3.26 come sulle macchine dove ha fallito. Quindi, in sintesi, aggiungere questo prima del comando di installazione per discourse ha fatto il trucco per me (non è stato sufficiente fare il pinning di bundler a 2.3.20 dopo l’installazione di bundler di discourse, doveva essere prima):
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
Perché diavolo alcune di quelle macchine avevano bundler 2.3.26 e altre 2.3.20 non ho idea… ma probabilmente non è colpa tua
.