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 => falsepermata 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 YAMLmodul sebagai objek di memori.
:require => falsedan kemudian dalam kode Anda memilikirequire 'library_name_here'
Anda menggunakan :require => falsesaat 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 => falseapa pun yang Anda perlu jalankan dari baris perintah tetapi tidak perlu dalam kode Anda.
require: falsememberitahu Bundler.requireuntuk tidak meminta permata tertentu: permata harus diminta secara eksplisit melalui require 'gem'.
Opsi ini tidak mempengaruhi:
bundle install: permata akan diinstal terlepas
yang requirepath pencarian setup oleh bundler.
Bundler menambahkan hal-hal ke jalan ketika Anda melakukan salah satu dari:
Bundle.setuprequire bundler/setupbundle execContoh
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.rbconfig/application.rbconfig/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 'fakermungkin tidak menggunakan versi permata yang benar, khususnya jika Anda Gemfile menunjuk ke git ref.
Setiap kali Anda menentukan Permata di Gemfiledan 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 => falseGemfile 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.requiresecara default seperti yang saya mengerti. Hanya jawaban Ciro dan Nesha yang benar.