Jawaban:
Ini berarti menginstal permata, tetapi jangan panggil keharusan ketika Anda memulai Bundler. Jadi, Anda harus menelepon secara manual
require "whenever"
jika Anda ingin menggunakan perpustakaan.
Jika Anda melakukannya
gem "whenever", require: "whereever"
maka bundler akan mengunduh permata bernama kapan saja, tetapi akan menelepon
require "whereever"
Ini sering digunakan jika nama perpustakaan yang diperlukan berbeda dari nama permata.
:require => false
permata khusus ini dan secara eksplisit require "thegem"
dari tugas menyapu. Ini kemudian akan menghemat memori dalam proses aplikasi utama dan waktu mulai dll. Kinerja aplikasi, bagaimanapun, tidak boleh terpengaruh bahkan jika Anda memerlukan permata tambahan ini dalam setiap proses.
require 'yaml'
, Anda sekarang memiliki YAML
modul sebagai objek di memori.
:require => false
dan kemudian dalam kode Anda memilikirequire 'library_name_here'
Anda menggunakan :require => false
saat Anda ingin permata diinstal tetapi tidak "wajib".
Jadi, dalam contoh yang Anda berikan:
gem 'whenever', :require => false
ketika seseorang menjalankan bundel, instal permata kapan saja yang akan diinstal gem install whenever
. Setiap kali digunakan untuk membuat pekerjaan cron dengan menjalankan tugas menyapu tetapi biasanya tidak digunakan dari dalam rel (atau kerangka kerja lain jika bukan rel) aplikasi.
Jadi Anda dapat menggunakan :require => false
apa pun yang Anda perlu jalankan dari baris perintah tetapi tidak perlu dalam kode Anda.
require: false
memberitahu Bundler.require
untuk tidak meminta permata tertentu: permata harus diminta secara eksplisit melalui require 'gem'
.
Opsi ini tidak mempengaruhi:
bundle install
: permata akan diinstal terlepas
yang require
path pencarian setup oleh bundler.
Bundler menambahkan hal-hal ke jalan ketika Anda melakukan salah satu dari:
Bundle.setup
require bundler/setup
bundle exec
Contoh
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
Maka yang berikut tidak akan memunculkan pengecualian:
bundle install --path=.bundle
bundle exec ruby main.rb
Di GitHub untuk Anda mainkan.
Penggunaan rel
Seperti dijelaskan dalam tutorial inisialisasi , template Rails default berjalan saat startup:
config/boot.rb
config/application.rb
config/boot.rb
mengandung:
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
yang melakukan require 'bundler/setup'
dan mengatur path yang diperlukan.
config/application.rb
tidak:
Bundler.require(:default, Rails.env)
yang sebenarnya membutuhkan permata.
require 'faker
mungkin tidak menggunakan versi permata yang benar, khususnya jika Anda Gemfile menunjuk ke git ref.
Setiap kali Anda menentukan Permata di Gemfile
dan menjalankan bundle install
, bundler akan pergi dan menginstal permata dan memuat kode yang ditentukan untuk Permata di aplikasi Anda dengan menempatkan require 'whenever'
cara ini bundler akan memuat kode untuk semua Permata Anda di aplikasi Rails Anda, dan Anda dapat memanggil metode apa pun dari Permata apa pun tanpa rasa sakit, seperti yang sering Anda lakukan.
tetapi Permata seperti whenever, faker or capistrano
adalah sesuatu yang Anda tidak perlu dalam kode aplikasi Anda, Anda perlu setiap kali kode dalam schedule.rb
file Anda untuk mengelola crons dan kode capistrano dalam deploy.rb
file untuk menyesuaikan resep penempatan sehingga Anda tidak perlu memuat kode untuk permata ini dalam kode aplikasi Anda dan di mana pun Anda berada ingin memanggil metode apa pun dari Permata ini, Anda dapat secara manual meminta permata ini sendiri dengan meletakkannya require "whenever"
. jadi Anda memasukkan :require => false
Gemfile Anda untuk Permata ini, dengan cara ini bundler akan menginstal Permata itu tetapi tidak memuat kode untuk Permata itu sendiri, Anda dapat melakukannya kapan pun Anda inginkan dengan hanya menempatkan seperti memerlukan 'kapan saja' dalam kasus Anda.
Untuk meminta permata di Gemfile Anda, Anda harus menelepon Bundler.require
.
Anda dapat mencegah bundler meminta permata require: false
, tetapi tetap akan menginstal dan memelihara permata tersebut. Lihat ini untuk penjelasan yang lebih rinci.
Bundler.require
secara default seperti yang saya mengerti. Hanya jawaban Ciro dan Nesha yang benar.