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