J'avais l'impression que depuis que je n'ai pas require: false
en mon Gemfile, Slop devrait être chargé lorsque je cours bundle exec ruby test.rb et je ne devrais pas avoir besoin de mettre la ligne "slop" exiger dans le fichier.
Le bundler docs disent:
Indiquez vos dépendances dans un Gemfile dans votre racine de projet:
source 'https://rubygems.org'
gem 'nokogiri' #<======HERE
l'intérieur de votre application, charger l'environnement groupé :
require 'rubygems'
require 'bundler/setup'
# require your gems as usual
require 'nokogiri' #<========AND HERE
Quant à ceci:
J'avais l'impression que depuis que je n'ai pas require: false
dans mon Gemfile, Slop doit être chargé quand je lance paquet test Ruby exec. rb et je n'aurais pas besoin de mettre la ligne require "slop" dans le fichier.
Les documents bundler sont horribles sur ce point.Autant que je sache, :require => false
est une chose spécifique à Rails, qui est utilisée pour réduire les temps de chargement au démarrage du projet. Dans une application rails, en spécifiant require: false
signifie que la gemme ne sera pas chargée tant que vous n'aurez pas besoin de la gemme manuellement. Si vous ne spécifiez pas :require => false
, alors la gemme sera chargée automatiquement - mais c'est parce que le code des rails est écrit pour faire ce chargement automatique. Votre application n'a aucun code qui remplit une fonction similaire.
Édition: Nous avons fait une erreur lors du test. Voici comment cela fonctionne: Dans une application non-rails, par ex. dans votre test.rb, si vous voulez exiger automatiquement toutes les gemmes spécifiées dans votre Gemfile, vous devez écrire:
Bundler.require :default
La mention Bundler docs que dans les petits caractères ici:
Spécifiez :require => false
pour empêcher bundler d'exiger la gemme, mais toujours l'installer et maintenir les dépendances.
gem 'rspec', :require => false
gem 'sqlite3'
Afin d'exiger des pierres précieuses dans votre Gemfile, vous devrez appeler Bundler.require
dans votre application.
Je ne sais pas pourquoi cette exigence n'a été mentionnée conjointement avec require: false
au lieu d'être indiqué au début.
Et, dans votre Gemfile si vous spécifiez:
gem 'slop', :require => false
(ainsi que dans Bundler.require :default
test.rb), alors vous devez aussi exiger explicitement la pierre précieuse slops dans test.rb:
require 'slop'
En d'autres termes, Bundler.require :default
requiert automatiquement toutes les gemmes dans votre Gemfile à l'exception des gemmes marquées require: false
. Pour les gemmes marquées avec require: false
, vous devez écrire manuellement require 'gem_name'
dans votre application.
Par conséquent, neydroid posté la bonne solution.
*
Dans votre Gemfile, vous pouvez les pierres précieuses des nids dans les groupes, ce qui affecte la façon dont Bundler.require() fonctionne. Voir le Bundler docs on groups.
Aucune idée pourquoi cela a été downvoted mais j'ai donné 1 et apprécier la rigueur – sixty4bit