Réponses:
Cela signifie installer la gemme, mais n'appelez pas require lorsque vous démarrez Bundler. Vous devrez donc appeler manuellement
require "whenever"
si vous souhaitez utiliser la bibliothèque.
Si tu devais faire
gem "whenever", require: "whereever"
alors bundler téléchargerait la gemme nommée à chaque fois, mais appellerait
require "whereever"
Ceci est souvent utilisé si le nom de la bibliothèque à exiger est différent du nom de la gemme.
:require => false
ces joyaux particuliers et explicitement require "thegem"
de la tâche de râteau. Cela permettrait alors d'économiser de la mémoire dans les processus d'application principaux et le temps de démarrage, etc. Les performances de l'application, cependant, ne devraient pas être affectées même si vous avez besoin de ces gemmes supplémentaires dans chaque processus.
require 'yaml'
, vous avez maintenant le YAML
module en tant qu'objet en mémoire.
:require => false
, puis dans votre code, avoirrequire 'library_name_here'
Vous utilisez :require => false
quand vous voulez que la gemme soit installée mais pas "requise".
Ainsi, dans l'exemple que vous avez donné:
gem 'whenever', :require => false
lorsque quelqu'un exécute l'installation de bundle, la gemme à chaque fois doit être installée comme avec gem install whenever
. Chaque fois qu'il est utilisé pour créer des tâches cron en exécutant une tâche de râteau, mais n'est généralement pas utilisé à partir de l'application rails (ou autre structure si ce n'est rails).
Vous pouvez donc utiliser :require => false
pour tout ce que vous devez exécuter à partir de la ligne de commande mais dont vous n'avez pas besoin dans votre code.
require: false
indique de Bundler.require
ne pas exiger cette gemme spécifique: la gemme doit être demandée explicitement via require 'gem'
.
Cette option n'affecte pas :
bundle install
: la gemme sera installée malgré tout
la require
configuration du chemin de recherche par bundler.
Bundler ajoute des éléments au chemin lorsque vous effectuez l'une des opérations suivantes:
Bundle.setup
require bundler/setup
bundle exec
Exemple
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
Ensuite, les éléments suivants ne déclencheront pas d'exceptions:
bundle install --path=.bundle
bundle exec ruby main.rb
Sur GitHub pour que vous puissiez jouer avec.
Utilisation des rails
Comme expliqué dans le tutoriel d'initialisation , le modèle Rails par défaut s'exécute au démarrage:
config/boot.rb
config/application.rb
config/boot.rb
contient:
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
qui fait le require 'bundler/setup'
et configure le chemin requis.
config/application.rb
Est-ce que:
Bundler.require(:default, Rails.env)
qui nécessite en fait les gemmes.
require 'faker
peut ne pas utiliser la bonne version de gemme, en particulier si vous êtes Gemfile pointe vers une référence git.
Chaque fois que vous spécifiez une gemme dans votre Gemfile
exécution bundle install
, bundler ira installer la gemme spécifiée et chargera le code pour cette gemme dans votre application en mettant de require 'whenever'
cette façon bundler chargera le code pour toutes vos gemmes dans votre application Rails, et vous pouvez appeler n'importe quelle méthode de n'importe quel bijou sans aucune douleur, comme vous le faites la plupart du temps.
mais les gemmes comme whenever, faker or capistrano
sont quelque chose dont vous n'avez pas besoin dans votre code d'application dont vous avez besoin chaque fois que du code dans votre schedule.rb
fichier pour gérer les codes crons et capistrano dans le deploy.rb
fichier pour personnaliser la recette de déploiement, vous n'avez donc pas besoin de charger le code de ces gemmes dans votre code d'application et où que vous soyez voulez appeler n'importe quelle méthode à partir de ces gemmes, vous pouvez manuellement exiger ces gemmes par vous-même en les mettant require "whenever"
. Donc, vous mettez :require => false
votre Gemfile pour ces gemmes, de cette façon le bundle installera cette gemme mais ne chargera pas le code pour cette gemme elle-même, vous pouvez le faire quand vous le souhaitez en mettant simplement comme exiger "à chaque fois" dans votre cas.
Afin d'exiger des gemmes dans votre Gemfile, vous devrez appeler Bundler.require
.
Vous pouvez empêcher Bundler d'exiger la gemme avec require: false
, mais il installera et maintiendra toujours la gemme. Vérifiez ceci pour une explication plus détaillée.
Bundler.require
par défaut ce que je comprends. Seules les réponses de Ciro et Nesha sont correctes.