Problemumgehung für Bundler.require-Fehler beim Ausführen von Ruby mit crontab

Was in diesem Artikel zu schreiben

Im vorherigen Artikel habe ich über ein Shell-Skript mit Cron geschrieben und bin beim Ausführen von Ruby gestolpert. Eigentlich bin ich auf einen anderen gestoßen, also werde ich ihn ausgeben, um seinen Inhalt nicht zu vergessen. Über den Fehler, den ich beim Ausführen von "Bundler.require" in der Ruby-Datei erhalten habe.

Referenzierte Seite: bow: Danke.

Fazit

Sie können in das Verzeichnis cd, in dem sich die Gemfile befindet, und dann ruby ausführen. Aber ich verstehe es nicht richtig.

/home/user_name/ruby_test.sh


#!/bin/bash
cd /home/user_name/sample && ruby /home/user_name/sample/tasks/test_ruby.rb

Was ist passiert

Situationsanordnung

crontab


00 13 * * * /bin/bash /home/user_name/ruby_test.sh > /home/user_name/log/ruby_test.log 2>&1

/home/user_name/ruby_test.sh


#!/bin/bash
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
rbenv shell 2.7.1
ruby /home/user_name/sample/tasks/test_ruby.rb

/home/user_name/sample/tasks/test_ruby.rb


require 'bundler/setup'
Bundler.require

#Der Rubinprozess wird unten fortgesetzt

Das ausgeführte Skript. Wenn Sie sich die Protokolldatei ansehen, stimmt etwas nicht. ..

/home/user_name/log/ruby_test.log


/home/user_name/sample/tasks/test_ruby.rb:2:in `<main>': private method `require' called for Bundler:Module (NoMethodError)

Es scheint nicht zu funktionieren.

Aber

cd /home/user_name/sample
ruby /tasks/test_ruby.rb

Wenn Sie ausführen, können Sie es ohne Fehler ausführen.

Ich habe nicht verstanden warum, aber

https://github.com/rubygems/bundler/blob/master/lib/bundler.rb#L173

Bundler.require Ich beschloss zu sehen, was er tat.

bundler/lib/bundler.rb



def require(*groups)
  setup(*groups).require(*groups)
end

Folgen wir dem Setup.

https://github.com/rubygems/bundler/blob/35be6d9a603084f719fec4f4028c18860def07f6/lib/bundler.rb#L139

bundler/lib/bundler.rb



def setup(*groups)
   # Return if all groups are already loaded
   return @setup if defined?(@setup) && @setup 

   definition.validate_runtime!

   SharedHelpers.print_major_deprecations!
   if groups.empty?
     # Load all groups, but only once
     @setup = load.setup
   else
     load.setup(*groups)
   end
end

Diesmal rufe ich ohne Argumente an @ setup = load.setup wird wahrscheinlich aufgerufen.

bundler/lib/bundler.rb


def load
  @load ||= Runtime.new(root, definition)
end

bundler/lib/bundler/runtime.rb


def setup(*groups)
   @definition.ensure_equivalent_gemfile_and_lockfile if Bundler.frozen_bundle?

   groups.map!(&:to_sym)

   # Has to happen first
   clean_load_path

   specs = groups.any? ? @definition.specs_for(groups) : requested_specs

   SharedHelpers.set_bundle_environment
   Bundler.rubygems.replace_entrypoints(specs)

   # Activate the specs
   load_paths = specs.map do |spec|
     unless spec.loaded_from
       raise GemNotFound, "#{spec.full_name} is missing. Run `bundle install` to get it."
     end

     check_for_activated_spec!(spec)

     Bundler.rubygems.mark_loaded(spec)
     spec.load_paths.reject {|path| $LOAD_PATH.include?(path) }
   end.reverse.flatten

   Bundler.rubygems.add_to_load_path(load_paths)

   setup_manpath

   lock(:preserve_unknown_sections => true)

   self
end

Ich kann es überhaupt nicht als erforderlich bezeichnen. Mir ist klar, dass ein Blick nach vorne mir nur beim Lernen hilft. Ich erhalte die Fehlermeldung, dass es sich um eine private Methode handelt, die jedoch nicht wie eine private Methode aussieht. Suchen Sie nur am falschen Ort? ?? ?? ?? ??

Hinweis: Bundler ist jetzt ein Archiv. Es scheint besser zu sein, rubygems zu verwenden.

Ich werde es wieder lesen, wenn ich Zeit habe, Ich verstehe immer noch nicht genau, wo der Fehler zurückgegeben wird und warum er passiert ist. .. : enttäuscht:

Wie auch immer, ich wusste, dass es funktionieren würde, wenn ich eine CD mache, also werde ich versuchen, es so zu schreiben.

/home/user_name/ruby_test.sh


#!/bin/bash
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
rbenv shell 2.7.1

cd /home/user_name/sample && ruby /home/user_name/sample/tasks/test_ruby.rb

Ich verstehe es nicht richtig, aber es hat funktioniert. .. .. : Denken: Ich verstehe es nicht. Wochenendhausaufgaben. .. Ich werde vorerst weiter nachforschen. : Notizbuch :: Läufer:

Wenn Sie irgendwelche freundlichen Leute haben, wäre ich dankbar, wenn Sie mich in den Kommentaren wissen lassen könnten. : Bogen:

Danke fürs Lesen. : Bogen:

Recommended Posts

Problemumgehung für Bundler.require-Fehler beim Ausführen von Ruby mit crontab
Fehler beim Spielen mit Java
Die Ursache des DOMA 4019-Fehlers beim Kompilieren mit Gradle lag 7 Tage lang
Studieren bei CodeWar (Ruby) ④ case ~ when
Problemumgehung für Xcode 12 Fehler "Include in doppelten Anführungszeichen"
[Fehler] In Bezug auf rbenv: Ruby 2.5.1 ist nicht installiert, wenn die automatische Bereitstellung ausgeführt wird
Erste Schritte mit Ruby für Java-Ingenieure
Fehler beim Erstellen der Infrastruktur mit der aws-App
[Ruby / Rails] Mechanismus zum erneuten Versuch eines Thread-Fehlers
Tipps zur Behandlung von gRPC-Fehlern in Ruby
[Fehlerbehebung] Tritt auf, wenn versucht wird, mit Docker eine Umgebung für den Frühling zu erstellen
[Rails] Fehlerbehebung beim Generieren von Token mit PAYJP
Release: Durchführen der Bereitstellung gibt Fehlercode 400
[Docker für Mac] Fehler beim Speichern von Anmeldeinformationen beheben
[Rails] Verfahren zum Verknüpfen von Datenbanken mit Ruby On Rails
Spring - Fehler- / Fehlervermeidung beim Erstellen einer API für POST