Co oznacza "require: false" W Gemfile?

Robi to:

gem 'whenever', require: false

Oznacza, że gem musi być zainstalowany, czy oznacza to, że nie jest wymagany?

Author: sawa, 2011-01-26

5 answers

Oznacza to zainstaluj gem, ale nie wywołaj require podczas uruchamiania Bundlera. Musisz więc ręcznie wywołać

require "whenever"

Jeśli chcesz skorzystać z biblioteki.

If you were to do

gem "whenever", require: "whereever"

Wtedy bundler pobierał klejnot o nazwie kiedykolwiek, ale wywoływał

require "whereever"

Jest to często używane, jeśli nazwa wymaganej biblioteki jest inna niż nazwa klejnotu.

 482
Author: Rob Di Marco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-07 06:11:28

Używasz :require => false, gdy chcesz, aby gem był zainstalowany, ale nie "wymagany".

Więc w przykładzie podałeś: gem 'whenever', :require => false gdy ktoś uruchomi bundle install to gem będzie zainstalowany jak z gem install whenever. Whether jest używany do tworzenia zadań cron poprzez uruchomienie zadania rake, ale zwykle nie jest używany z poziomu aplikacji rails (lub innego frameworka, jeśli nie rails).

Więc możesz używać :require => false do wszystkiego, co musisz uruchomić z linii poleceń, ale nie potrzebujesz w swoim kodzie.

 76
Author: gduq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-26 02:55:53

require: false mówi Bundler.require, aby nie wymagał tego konkretnego klejnotu: klejnot musi być wymagany bezpośrednio przez require 'gem'.

Ta opcja ma nie wpływ:

  • bundle install: gem zostanie zainstalowany niezależnie

  • Konfiguracja require ścieżki wyszukiwania przez bundlera.

    Bundler dodaje rzeczy do ścieżki, gdy robisz jedno z:

    • Bundle.setup
    • który jest wywoływany przez require bundler/setup
    • który jest wywoływany przez bundle exec

Przykład

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

W takim razie poniższe nie wywoła WYJĄTKÓW:

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

Na Githubie , abyś mógł się nim bawić.

Rails usage

Jak wyjaśniono w samouczku inicjalizacji , domyślny szablon Rails działa przy starcie:

  • config/boot.rb
  • config/application.rb

config/boot.rb zawiera:

ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])

Które wykonuje require 'bundler/setup' i ustawia ścieżkę require.

config/application.rb robi:

Bundler.require(:default, Rails.env)
Co właściwie wymaga klejnotów.
 65
Author: Ciro Santilli TRUMP BAN IS BAD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-15 16:04:42

Za każdym razem, gdy podasz Gem w Gemfile i uruchomisz bundle install, bundler zainstaluje podany gem i załaduje kod dla tego Gem w Twojej aplikacji, umieszczając require 'whenever' w ten sposób bundler załaduje kod dla wszystkich Twoich Gem w Twojej aplikacji Rails i możesz wywołać dowolną metodę z dowolnego Gem bez żadnego bólu, jak to robisz przez większość czasu.

Ale klejnoty takie jak whenever, faker or capistrano to coś, czego nie potrzebujesz w kodzie aplikacji, potrzebujesz zawsze, gdy kod w pliku schedule.rb do zarządzania cronami i kodem capistrano w pliku deploy.rb aby dostosować przepis wdrożenia, aby nie trzeba ładować kodu dla tych klejnotów w kodzie aplikacji i gdziekolwiek chcesz wywołać dowolną metodę z tych klejnotów, możesz ręcznie wymagać thsese klejnotów przez siebie, umieszczając require "whenever" . więc umieściłeś :require => false w swoim pliku dla tych klejnotów, w ten sposób bundler zainstaluje ten klejnot, ale nie załaduje kodu dla samego klejnotu, możesz to zrobić kiedy chcesz, po prostu umieszczając like require 'whenever' w Twoim przypadku.

 13
Author: Subhash Chandra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-07 04:17:25

Aby wymagać klejnotów w pliku Gemfile, musisz zadzwonić Bundler.require.

Możesz zapobiec wymaganiu klejnotu przez bundlera za pomocą require: false, ale nadal będzie instalował i konserwował klejnot. Sprawdź to, aby uzyskać bardziej szczegółowe wyjaśnienie.

 2
Author: Nesha Zoric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-09 15:30:10