2016-04-20 32 views
0

Ich mache ein Tutorial zur Authentifizierung und kam über die folgende Zeile für gemfile. Was nützt require hier?Was bedeutet `require:` in einer Rails-Datei?

gem 'google-api-client', require: 'google/api_client' 

Tutorial: http://willschenk.com/setting-up-devise-with-twitter-and-facebook-and-other-omniauth-schemes-without-email-addresses/

I require in Javascript zu verstehen, aber in Rails dachte ich, die gemfile ist Edelsteine ​​für die Installation, und sobald sie installiert sind, können sie in der Anwendung verwendet werden, und das ist alles, was es dazu ... also bin ich mir nicht sicher, warum ich require verwenden würde.

Ich bin besonders interessiert, weil nach dem Hinzufügen dieser Zeile und Starten des Servers, lief ich in einen Fehler.

Fehler:

/usr/local/rvm/gems/ruby-2.3.0/gems/bundler-1.11.2/lib/bundler/runtime.rb:77:in `require': cannot load such file -- google/api_client (LoadError)

Vorübergehende Lösung: Ich habe den require: Teil kommentiert und der Fehler verhindert wird. Aber vielleicht ist das nicht ideal.

Das Verständnis der Verwendung von require würde sehr hilfreich bei der Fehlersuche helfen.

Ich lese andere Artikel über SO, aber sie diskutieren Besonderheiten wie require => nil und require => false, die ich denke, ist ein wenig anders als meine Frage.

  1. Bunder: What does :require => nil in Gemfile mean?
  2. Bundler: What does :require => false in a Gemfile mean?

Kann jemand etwas anstacheln teilen?

UPDATE

ich dies später gefunden, die es gut erklärt: When do you need a require in a rails Gemfile?

If you omit the :require option, by default Bundler will attempt to require the gem by using the standard name-to-file conversion rule:

This works well if the gem author has followed the standard conventions. But in some cases, for a variety of reasons, this doesn't happen.

+0

Versuchen Sie, das 'require ..' zu dem entsprechenden Modell hinzuzufügen, in dem Sie den Edelstein verwenden und diesen Teil nicht in die Edelsteindatei aufnehmen. –

+0

Normalerweise bedeutet dieser Fehler, dass es keine 'google/api_client'-Datei im' google-api-client' gem-Bibliotheksordner gibt, überprüfen Sie sie manuell, indem Sie in bash ausgeben: 'file $ (Bundle show google-api-client)/lib/google/api_client' –

+0

Ich kann tatsächlich direkt in 'api_client'-Verzeichnis cd -'/usr/local/rvm/Gems/Ruby-2.3.0/Gems/Google-API-Client-0.9.5/Lib/Google/Api_client " . Könnte es dafür an der falschen Stelle suchen? –

Antwort

1

Wenn der Edelstein selbst keine seiner lib erfordert, müssen Sie das tun, entweder in Ihrem Gemfile (so wie du es geschrieben hast) oder in einer Datei in deinem Projekt.

Bsp .: Stellen Sie sich ein Juwel vor, das mehr als eine Lösung für ein bestimmtes Problem hat. Sie möchten jedoch nicht alle diese Lösungen (Dateien) laden, Sie benötigen nur eine. Dann müssten Sie angeben, welche Datei geladen werden soll, indem Sie require: some_lib verwenden.

+0

Dies wird ausschließlich aus Leistungsgründen durchgeführt und das Ausschließen von 'require' hat keine negativen Auswirkungen auf die App-Funktionalität? –

+0

@pandaman nicht unbedingt. Je nachdem, wie der Edelstein strukturiert ist, müssen Sie den 'require' hinzufügen. –