ruby-on-rails install - Bundler:Qu'est-ce que:require=>false dans un Gemfile?




example (5)

require: false indique à Bundler.require ne pas exiger cette gemme spécifique: la gemme doit être explicitement requise via require 'gem' .

Cette option n'affecte pas :

  • bundle install : la gem sera installée indépendamment

  • la configuration du chemin de recherche require par bundler.

    Bundler ajoute des éléments au chemin lorsque vous effectuez l'une des opérations suivantes:

    • Bundle.setup
    • qui est appelé par require bundler/setup
    • qui est appelé par 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

Alors ce qui suit ne soulèvera pas d'exceptions:

bundle install --path=.bundle
bundle exec ruby main.rb

Sur GitHub pour que vous puissiez jouer avec.

Rails d'utilisation

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 require.

config/application.rb fait:

Bundler.require(:default, Rails.env)

ce qui nécessite réellement les gemmes.

La ligne est celle-ci:

gem 'whenever', :require => false

Cela signifie-t-il que la gemme doit être installée ou n'est pas requise?


Chaque fois que vous spécifiez un Gem dans votre Gemfile et que vous lancez bundle install , bundler ira installer le code gem et load spécifié pour cette Gem dans votre application en mettant require 'whenever' every require 'whenever' , ainsi bundler chargera le code pour toutes vos Gemmes dans vos Rails app, et vous pouvez appeler n'importe quelle méthode de n'importe quel Gem sans douleur, comme vous le faites la plupart du temps.

mais des gemmes comme whenever,faker or capistrano sont quelque chose dont vous n'avez pas besoin dans votre code d'application vous avez besoin de code dans votre fichier schedule.rb pour gérer le code crons et capistrano dans le fichier deploy.rb pour personnaliser la recette de déploiement afin de ne pas charger code pour ces gemmes dans votre code d'application et où vous voulez appeler n'importe quelle méthode de ces gemmes, vous pouvez manuellement exiger ces gemmes par vous-même en mettant require "whenever" . donc vous mettez :require => false dans votre Gemfile pour ces gemmes, de cette façon bundler installera cette Gem mais ne chargera pas le code pour ce Gem lui-même, vous pouvez le faire quand vous voulez en utilisant simplement 'every' dans votre cas.


Cela signifie installer la gemme, mais ne pas appeler require lorsque vous démarrez Bundler. Vous devrez donc appeler manuellement

require "whenever"

si vous voulez utiliser la bibliothèque.

Si vous deviez faire

gem "whenever", :require=>"whereever"

alors bundler téléchargerait la gemme nommé à chaque fois, mais appellerait

require "whereever"

Ceci est souvent utilisé si le nom de la bibliothèque à requérir est différent du nom de la gemme.


Afin d'exiger des pierres précieuses dans votre Gemfile, vous devrez appeler Bundler.require .

Vous pouvez empêcher bundler de requérir la gemme avec require: false , mais il va tout de même installer et maintenir la gemme. Vérifiez ceci pour une explication plus détaillée.


Pour suivre la réponse de Ron si vous utilisez JQuery et le mettre dans application.js ou dans la section head, vous devez l'envelopper dans une section ready () ...

$(document).ready(function() {
  $('#my-link').click(function(event){
    alert('Hooray!');
    event.preventDefault(); // Prevent link from following its href
  });
});






ruby-on-rails ruby bundler gemfile