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



1 Answers

Vous utilisez :require => false lorsque vous voulez que la gemme soit installée mais pas "requise".

Donc, dans l'exemple que vous avez donné: gem 'whenever', :require => false quand quelqu'un exécute bundle installe le chaque fois que gem serait installé 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 rake, mais n'est généralement pas utilisé à partir de l'application rails (ou autre cadre si ce n'est des 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.

Question

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.




Related