ruby - instalar - ¿Qué significa ''requerir: falso'' en Gemfile?
ruby bundle install windows (5)
Esto significa instalar la gema, pero no llamar a require cuando inicie Bundler. Así que necesitarás llamar manualmente
require "whenever"
Si quieres usar la biblioteca.
Si fueras a hacer
gem "whenever", require: "whereever"
entonces Bundler descargaría la gema con el nombre siempre, pero llamaría
require "whereever"
Esto se usa a menudo si el nombre de la biblioteca que se requiere es diferente al nombre de la gema.
Haz esto:
gem ''whenever'', require: false
¿Significa que la gema necesita ser instalada, o significa que no es necesaria?
Para requerir gemas en tu Gemfile, deberás llamar a Bundler.require
.
Puede evitar que el agrupador requiera la gema con require: false
, pero seguirá instalando y manteniendo la gema. Compruebe esto para una explicación más detallada.
Siempre que especifique una gema en su Gemfile
y ejecute la bundle install
, el bundler irá e instalará la gema y el código de carga especificados para esa Gem en su aplicación al poner require ''whenever''
, de esta manera el bundler cargará el código para todas sus gemas en sus Rails Aplicación, y puedes llamar a cualquier método desde cualquier gema sin ningún dolor, como lo haces la mayor parte del tiempo.
pero las gemas como whenever,faker or capistrano
son algo que no necesita en el código de la aplicación que necesita siempre que el código en su archivo schedule.rb
administre el código de deploy.rb
y capistrano en el archivo deploy.rb
para personalizar la receta de implementación, por lo que no necesita cargar código para estas gemas en el código de su aplicación y donde quiera que desee llamar a cualquier método de estas gemas, usted puede requerir estas gemas manualmente por usted mismo poniendo require "whenever"
. así que pones :require => false
en tu Gemfile para estas gemas, de esta manera el bundler instalará esa gema pero no cargará el código de esa gema en sí, puedes hacerlo cuando quieras simplemente poniendo "require" en tu caso.
Utiliza :require => false
cuando quieres que se instale la gema pero no "obligatorio".
Así que en el ejemplo que dio: gem ''whenever'', :require => false
cuando alguien ejecuta la instalación en paquete la vez que gema se instalaría como con la gem install whenever
. Cuando se utiliza para crear trabajos cron mediante la ejecución de una tarea de rake, pero generalmente no se usa desde la aplicación de rieles (u otro marco si no rieles).
Por lo tanto, puede usar :require => false
para cualquier cosa que necesite ejecutar desde la línea de comandos pero que no necesite dentro de su código.
require: false
le dice a Bundler.require
no requerir esa gema específica: la gema debe ser requerida explícitamente a través de require ''gem''
.
Esta opción no afecta a:
bundle install
: la gema se instalará independientementela configuración de ruta de búsqueda
require
por bundler.Bundler agrega cosas a la ruta cuando realiza una de las siguientes acciones:
-
Bundle.setup
- que es llamado por
require bundler/setup
- que se llama por
bundle exec
-
Ejemplo
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
Entonces lo siguiente no generará excepciones:
bundle install --path=.bundle
bundle exec ruby main.rb
En GitHub para que juegues con él.
Uso de rieles
Como se explica en el tutorial de inicialización , la plantilla de Rails predeterminada se ejecuta en el inicio:
-
config/boot.rb
-
config/application.rb
config/boot.rb
contiene:
ENV[''BUNDLE_GEMFILE''] ||= File.expand_path(''../../Gemfile'', __FILE__)
require ''bundler/setup'' if File.exists?(ENV[''BUNDLE_GEMFILE''])
que hace que require ''bundler/setup''
y configura la ruta de requerimiento.
config/application.rb
hace:
Bundler.require(:default, Rails.env)
que en realidad requiere las gemas.