ทำสิ่งนี้:
gem 'whenever', require: false
หมายความว่าต้องติดตั้งอัญมณีหรือหมายความว่าไม่จำเป็นต้องใช้?
ทำสิ่งนี้:
gem 'whenever', require: false
หมายความว่าต้องติดตั้งอัญมณีหรือหมายความว่าไม่จำเป็นต้องใช้?
คำตอบ:
หมายความว่าติดตั้งอัญมณี แต่ไม่ต้องโทรเมื่อคุณเริ่ม Bundler ดังนั้นคุณจะต้องโทรด้วยตนเอง
require "whenever"
ถ้าคุณต้องการใช้ห้องสมุด
ถ้าคุณจะทำ
gem "whenever", require: "whereever"
จากนั้นตัวรวบรวมจะดาวน์โหลดอัญมณีชื่อเมื่อใดก็ตาม แต่จะเรียก
require "whereever"
สิ่งนี้มักจะถูกใช้ถ้าชื่อของไลบรารีที่ต้องการแตกต่างจากชื่อของอัญมณี
:require => false
อัญมณีเฉพาะเหล่านี้และrequire "thegem"
จากภารกิจเรค นี่จะเป็นการบันทึกหน่วยความจำในกระบวนการแอปหลักและเวลาเริ่มต้นเป็นต้นประสิทธิภาพของแอปอย่างไรก็ตามไม่ควรได้รับผลกระทบแม้ว่าคุณจะต้องการอัญมณีเพิ่มเติมเหล่านี้ในทุกขั้นตอนก็ตาม
require 'yaml'
คุณจะมีYAML
โมดูลเป็นวัตถุในหน่วยความจำ
:require => false
แล้วในรหัสของคุณมีrequire 'library_name_here'
คุณใช้:require => false
เมื่อคุณต้องการให้ติดตั้งอัญมณี แต่ไม่จำเป็นต้องมี
ดังนั้นในตัวอย่างที่คุณให้:
เมื่อมีคนวิ่งมัดติดตั้งเมื่อใดก็ตามที่พลอยจะได้รับการติดตั้งเช่นเดียวกับgem 'whenever', :require => false
gem install whenever
เมื่อใดก็ตามที่ใช้ในการสร้างงาน cron โดยการเรียกใช้งาน rake แต่โดยปกติจะไม่ได้ใช้จากภายในแอพพลิเคชั่นทางรถไฟ
ดังนั้นคุณสามารถใช้:require => false
สำหรับทุกสิ่งที่คุณต้องการเรียกใช้จากบรรทัดคำสั่ง แต่ไม่ต้องการในโค้ดของคุณ
require: false
บอกBundler.require
ไม่ได้ว่าจะต้องใช้เฉพาะอัญมณี: require 'gem'
อัญมณีจะต้องถูกต้องอย่างชัดเจนผ่านทาง
ตัวเลือกนี้จะไม่ส่งผลกระทบ:
bundle install
: อัญมณีจะได้รับการติดตั้งโดยไม่คำนึงถึง
การrequire
ตั้งค่าพา ธ การค้นหาโดยตัวรวม
Bundler เพิ่มสิ่งต่าง ๆ ลงในพา ธ เมื่อคุณทำสิ่งใดสิ่งหนึ่งต่อไปนี้
Bundle.setup
require bundler/setup
bundle exec
ตัวอย่าง
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
จากนั้นต่อไปนี้จะไม่เพิ่มข้อยกเว้น:
bundle install --path=.bundle
bundle exec ruby main.rb
บน GitHubเพื่อให้คุณเล่นกับมัน
การใช้งาน Rails
ตามที่อธิบายไว้ในบทช่วยสอนการเริ่มต้นแม่แบบ Rails เริ่มต้นจะทำงานเมื่อเริ่มต้น:
config/boot.rb
config/application.rb
config/boot.rb
ประกอบด้วย:
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
ซึ่งทำrequire 'bundler/setup'
และตั้งค่าพา ธ ที่ต้องการ
config/application.rb
ทำ:
Bundler.require(:default, Rails.env)
ซึ่งต้องใช้อัญมณีจริง
require 'faker
อาจไม่ใช้เวอร์ชันอัญมณีที่ถูกต้องโดยเฉพาะถ้าคุณเป็น Gemfile ชี้ไปที่การอ้างอิงแบบ git
เมื่อใดก็ตามที่คุณระบุ Gem ในGemfile
และรัน bundle install
Bundler จะไปและติดตั้ง gem ที่ระบุและโหลดโค้ดสำหรับ Gem ในแอพของคุณโดยการวาง require 'whenever'
วิธีนี้ Bundler จะโหลดโค้ดสำหรับ Gems ของคุณทั้งหมดในแอพ Rails ของคุณและคุณสามารถเรียกวิธีใดก็ได้ จากอัญมณีใด ๆ โดยไม่มีความเจ็บปวดเหมือนที่คุณทำเกือบตลอดเวลา
แต่ Gems like whenever, faker or capistrano
เป็นสิ่งที่คุณไม่ต้องการในรหัสแอพของคุณที่คุณต้องการเมื่อใดก็ตามที่รหัสในschedule.rb
ไฟล์ของคุณเพื่อจัดการ crons และรหัส capistrano ในdeploy.rb
ไฟล์เพื่อกำหนดสูตรการปรับใช้ดังนั้นคุณไม่จำเป็นต้องโหลดรหัสสำหรับอัญมณีเหล่านี้ในรหัสแอปของคุณ ต้องการที่จะเรียกวิธีการใด ๆ จากอัญมณีเหล่านี้คุณสามารถด้วยตนเองต้องใช้อัญมณี thsese require "whenever"
ด้วยตัวเองโดยการวาง ดังนั้นคุณใส่:require => false
Gemfile สำหรับ Gem เหล่านี้ด้วยวิธีนี้ Bundler จะติดตั้ง Gem นั้น แต่ไม่โหลดโค้ดสำหรับ Gem นั้นเองคุณสามารถทำได้ทุกเมื่อที่คุณต้องการโดยเพียงแค่ใส่ like ต้องการ 'เมื่อใดก็ตาม' ในกรณีของคุณ
ในการสั่งซื้อที่จะต้องใช้อัญมณีใน Gemfile Bundler.require
ของคุณคุณจะต้องเรียก
คุณสามารถป้องกันไม่ให้ Bundler ต้องการอัญมณีด้วยrequire: false
แต่มันจะยังคงติดตั้งและดูแลรักษาอัญมณี ตรวจสอบนี้ออกสำหรับคำอธิบายรายละเอียดเพิ่มเติม
Bundler.require
ตามค่าเริ่มต้นตามที่ฉันเข้าใจ มีเพียงคำตอบของ Ciro และ Nesha เท่านั้นที่ถูกต้อง