Ich habe einen sehr merkwürdigen Fehler, den ich mir nicht verkneifen kann.Klasse ist erforderlich, aber kein Zugriff möglich
Grundsätzlich habe ich diese Klasse in meinem lib
Ordner:
# lib/api/amazon.rb
module API
class Amazon
...
end
end
Wenn ich es will irgendwo verwenden, ich require
es:
require 'api/amazon'
API::Amazon.do_stuff
Dies funktioniert zunächst aber nach einer Weile bricht und wirft NameError: uninitialized constant API::Amazon
. Wenn ich debuggen und require
die Datei erneut versuchen, wenn der Fehler ausgelöst wird, gibt es false
zurück, die angibt, dass die Datei bereits geladen wurde. Ich kann es auch in $"
(diese Liste der geladenen Dateien) sehen. Warum kann ich dann nicht auf API::Amazon
zugreifen?
Hinweis: Ich habe "API" als Akronym auf ActiveSupport::Inflector
, weshalb ich muss nicht verwenden "Api": gleiche
Ich versuchte ::API::Amazon.do_stuff
Auch:
# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.acronym 'API'
end
EDIT Ergebnis.
Es sieht so aus, als würde 'ActiveSupport' von Zeit zu Zeit einige Aufräumarbeiten an seinen verschachtelten Klassen durchführen und dabei automatisch erstellte entfernen. Dies kann erforderlich sein, wenn jemand eine dynamische Klassenerweiterung mit 'class_eval'-ähnlichen Methoden verwendet. – mudasobwa
Weiß nicht genau, was Sie damit meinen, @mudasobwa.Ich benutze kein dynamisches 'class_eval' Zeug, es ist eine reguläre Klasse ohne jegliche dynamische oder metaprogrammierende Magie. –
Sie definieren eine Klasse unter bereits vorhandenem (und eingefrorenem) [ihrer Politik] (http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html)) Modul; Sagen wir, du hast "ActiveSupport :: Inflector" gefunden. 'ActiveSupport', einmal geladen, kann eine solche Bereinigung für ** es ** verschachtelte Klassen durchführen. – mudasobwa