Tut dies:
gem 'whenever', require: false
bedeutet, dass der Edelstein installiert werden muss, oder bedeutet es, dass er nicht erforderlich ist?
Tut dies:
gem 'whenever', require: false
bedeutet, dass der Edelstein installiert werden muss, oder bedeutet es, dass er nicht erforderlich ist?
Das bedeutet, dass Sie den Edelstein installieren, aber require nicht aufrufen, wenn Sie Bundler starten. Also müssen Sie manuell aufrufen
require "whenever"
wenn Sie die Bibliothek nutzen wollen.
Wenn Sie Folgendes tun würden
gem "whenever", require: "whereever"
dann würde Bundler den benannten Edelstein herunterladen, wann auch immer, aber würde die
require "whereever"
Dies wird oft verwendet, wenn der Name der Bibliothek, die benötigt wird, nicht mit dem Namen des Edelsteins übereinstimmt.
Sie verwenden :require => false
wenn Sie möchten, dass der Edelstein installiert wird, aber nicht "erforderlich" ist.
In dem von Ihnen genannten Beispiel also: gem 'whenever', :require => false
Wenn jemand bundle install ausführt, wird das Gem wann immer installiert, wie bei gem install whenever
. Whenever wird verwendet, um Cron-Jobs durch Ausführen eines Rake-Tasks zu erstellen, wird aber normalerweise nicht innerhalb der Rails-Anwendung (oder eines anderen Frameworks, wenn es sich nicht um Rails handelt) verwendet.
Sie können also verwenden :require => false
für alles, was Sie von der Kommandozeile aus ausführen müssen, aber nicht in Ihrem Code benötigen.
require: false
sagt Bundler.require
diesen speziellen Edelstein nicht zu benötigen: Der Edelstein muss explizit über require 'gem'
.
Diese Option bewirkt pas beeinflussen:
bundle install
: der Edelstein wird trotzdem installiert
die require
von Bundler eingerichteter Suchpfad.
Bundler fügt dem Pfad Dinge hinzu, wenn Sie eine der folgenden Aktionen durchführen:
Bundle.setup
require bundler/setup
bundle exec
Beispiel
Gemfile
source 'https://rubygems.org'
gem 'haml'
gem 'faker', require: false
main.rb
# Fail because we haven't done Bundler.require yet.
# bundle exec does not automatically require anything for us,
# it only puts them in the require path.
begin Haml; rescue NameError; else raise; end
begin Faker; rescue NameError; else raise; end
# The Bundler object is automatically required on `bundle exec`.
Bundler.require
Haml
# Not required because of the require: false on the Gemfile.
# THIS is what `require: false` does.
begin Faker; rescue NameError; else raise; end
# Faker is in the path because Bundle.setup is done automatically
# when we use `bundle exec`. This is not affected by `require: false`.
require 'faker'
Faker
Dann wird das Folgende keine Ausnahmen auslösen:
bundle install --path=.bundle
bundle exec ruby main.rb
Auf GitHub damit Sie damit spielen können.
Rails-Nutzung
Wie in der Initialisierungs-Tutorial wird das Standard-Rails-Template beim Starten ausgeführt:
config/boot.rb
config/application.rb
config/boot.rb
enthält:
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
die die require 'bundler/setup'
und richtet den erforderlichen Pfad ein.
config/application.rb
tut:
Bundler.require(:default, Rails.env)
die eigentlich die Edelsteine benötigt.
Wann immer Sie einen Gem in Ihrer Gemfile
und laufen bundle install
installiert der Bundler den angegebenen Edelstein und lädt den Code für diesen Edelstein in Ihre Anwendung, indem er require 'whenever'
Auf diese Weise lädt Bundler den Code für alle Ihre Gems in Ihrer Rails-Anwendung, und Sie können jede Methode von jedem Gem ohne Probleme aufrufen, wie Sie es die meiste Zeit tun.
aber Edelsteine wie whenever, faker or capistrano
sind etwas, das Sie nicht in Ihrem Anwendungscode brauchen, sondern immer dann, wenn Sie Code in Ihrem schedule.rb
Datei zur Verwaltung von Crons und Capistrano-Code in deploy.rb
Datei, um das Bereitstellungsrezept anzupassen, so dass Sie den Code für diese Edelsteine nicht in Ihren Anwendungscode laden müssen und wo auch immer Sie eine Methode von diesen Edelsteinen aufrufen wollen, können Sie diese Edelsteine selbst manuell anfordern, indem Sie require "whenever"
. so setzen Sie :require => false
in Ihrer Gemfile für diese Gems, auf diese Weise wird Bundler diese Gem installieren, aber nicht den Code für diese Gem selbst laden, Sie können es tun, wann immer Sie wollen, indem Sie einfach wie require 'whenever' in Ihrem Fall.
## Gemfile
gem "university_degree", require: false
gem "dealing_with_boss"
" dealing_with_boss
" - immer gebraucht - in den Speicher geladen und einsatzbereit.
Ich brauche das Diplom selten. Nur wenn ich mit Personalverantwortlichen spreche. Deshalb habe ich manuell require
und plötzlich sind Begriffe wie "Black Scholes-Merton" und "Heteroskadastizität" sofort parat; ich sage Personalverantwortlichen, dass ich "Bubble Sort" kann.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.