জেমফাইলে 'মিথ্যা' অর্থ কী?


428

এই আছে:

gem 'whenever', require: false

মানে রত্নটি ইনস্টল করা দরকার, বা এর অর্থ এটির প্রয়োজন নেই?


1
বেশিরভাগ উত্তর (স্বীকৃত উত্তর সহ) রেলগুলি সম্পর্কে যা Bundler.requireআমি বুঝতে পেরে ডিফল্টরূপে করি। কেবল সিরো এবং নেছার উত্তর সঠিক।
নাকিলন

উত্তর:


472

এর অর্থ রত্নটি ইনস্টল করুন তবে আপনি বান্ডিলার শুরু করার সময় কল করবেন না। সুতরাং আপনাকে ম্যানুয়ালি কল করতে হবে

require "whenever"

আপনি যদি গ্রন্থাগারটি ব্যবহার করতে চান

যদি আপনি করতেন

gem "whenever", require: "whereever"

তারপরে বান্ডলার যখনই নামক রত্নটি ডাউনলোড করত, তবে কল করত

require "whereever"

এটি প্রায়শই ব্যবহৃত হয় যদি প্রয়োজনীয় লাইব্রেরির নামটি রত্নের নামের চেয়ে আলাদা হয়।


112
@VenkatD। কখনও কখনও আপনি নির্দিষ্ট রত্ন ইনস্টল করতে চান তবে আপনি এগুলি প্রতিটি প্রক্রিয়াতে লোড করতে চান না। আমার একটি বিশেষ রেক টাস্ক রয়েছে যা আমি নিয়মিতভাবে হিরোকুতে তাদের সময়সূচী অ্যাড-অনের মাধ্যমে আবেদন করতে চাই। এই বিশেষ রেক টাস্কটির জন্য নির্দিষ্ট কিছু রত্ন প্রয়োজন যা বাকী অ্যাপ্লিকেশনটির প্রয়োজন হয় না। সুতরাং আমি :require => falseএই বিশেষ রত্ন এবং স্পষ্টভাবে require "thegem"রাক টাস্ক থেকে। এটি তখন মূল অ্যাপ্লিকেশন প্রক্রিয়াগুলিতে এবং প্রারম্ভকালীন সময়ে ইত্যাদির স্মৃতি সঞ্চয় করতে পারে App তবে অ্যাপ্লিকেশনটির কার্য সম্পাদন যদিও আপনার প্রতিটি প্রক্রিয়াতে এই অতিরিক্ত রত্ন প্রয়োজন তা এমনকি প্রভাবিত করা উচিত নয়।
মাইকেল ভ্যান রুইজেন

5
@ মিশেলভানরুইজন - দুর্দান্ত পয়েন্টগুলি: তবে: "প্রতিটি প্রক্রিয়াতে আপনার অতিরিক্ত রত্ন প্রয়োজন হলেও অ্যাপ্লিকেশন কর্মক্ষমতা প্রভাবিত হবে না"। আমি সত্য মনে করি না। বরাদ্দ করা অবজেক্টগুলি কাজ করে, এবং জিসি প্রতিবার তাদের সকলের মধ্য দিয়ে চলতে হবে, সুতরাং আরও = ধীর গতিতে, কনফারিক্স
নাথান লং

1
@ মিশেলভানরুইজেন - বাস্তবে আপনি ঠিক বলেছেন, আপনি লাইব্রেরিটি ব্যবহার না করা হলে সাধারণত ব্যাপারটি বিবেচিত হবে না। তবে একটি মণির প্রয়োজন কমপক্ষে তার মূল ফাইলটি lib এ লোড করবে এবং সম্ভবত এটির নিজস্ব আরও প্রয়োজন রয়েছে। এমনকি যদি আপনি require 'yaml', YAMLমেমরির একটি বস্তু হিসাবে আপনার এখন মডিউল আছে ।
নাথান লং

2
আপনি যদি সেটাকে মিথ্যা হিসাবে সেট করতে চান এবং লাইব্রেরির নামটিও রত্নের নামের সাথে আলাদা?
পিটার-জান সেলিস

2
@ পিটার-জ্যানকেলিস সেক্ষেত্রে আপনি কেবল সেট করবেন :require => falseএবং তারপরে আপনার কোডটিতে একটি রয়েছেrequire 'library_name_here'
রব ডি মার্কো

73

আপনি :require => falseযখন রত্নটি ইনস্টল করতে চান তবে "প্রয়োজনীয়" নয় আপনি ব্যবহার করেন ।

সুতরাং আপনি যে উদাহরণ দিয়েছেন: gem 'whenever', :require => false যখন কেউ বান্ডেল চালায় তখনই যখনই রত্নটি ইনস্টল করা হত ইনস্টল করুন gem install whenever। যখনই একটি রেক টাস্ক চালিয়ে ক্রোন জব তৈরি করতে ব্যবহৃত হয় তবে সাধারণত রেলের (বা অন্যান্য কাঠামো যদি রেল না হয়) অ্যাপ্লিকেশন থেকে ব্যবহৃত হয় না।

সুতরাং আপনি :require => falseকমান্ড লাইন থেকে চালানোর প্রয়োজন হয় এমন কোনও কিছুর জন্য আপনি ব্যবহার করতে পারেন তবে আপনার কোডের মধ্যে দরকার নেই।


6
আপনি কেবল অনুরোধের একটি ছোট উপসেটে ব্যবহার করেন এমন রত্নটির জন্যও এটি ব্যবহার করা যেতে পারে।
নাথান লং

61

require: falseBundler.requireনির্দিষ্ট রত্নটির প্রয়োজন না বলার জন্য: মণিটি অবশ্যই স্পষ্টরূপে আবশ্যক require 'gem'

এই বিকল্পটি প্রভাবিত করে না :

  • bundle install: মণি নির্বিশেষে ইনস্টল করা হবে

  • requirebundler করে সন্ধানের পাথ সেটআপ।

    আপনি যে কোনও একটি করতে গেলে বান্ডিলার পথে জিনিস যুক্ত করে:

    • 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

আপনি এটির সাথে খেলতে গিটহাবে On

রেল ব্যবহার

প্রারম্ভিককরণ টিউটোরিয়ালে যেমন ব্যাখ্যা করা হয়েছে , ডিফল্ট রেল টেম্পলেট প্রারম্ভকালে চলে:

  • 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ব্যবহারটি সঠিক রত্ন সংস্করণটি ব্যবহার নাও করতে পারে, বিশেষত যদি আপনি জেমফিল একটি গিট রেফের দিকে নির্দেশ করেন।
dazonic

@ ড্যাজনিক উদাহরণস্বরূপ হামল কি আলাদা?
সিরো সান্তিলি 法轮功 冠状 病 六四 事件 法轮功

9

যখনই আপনি আপনার কোনও চালককে Gemfileরান bundle installএবং নির্দিষ্ট করে নির্দিষ্ট করেন, বান্ডেলার require 'whenever'এই অ্যাপ্লিকেশনটিতে সেই রত্নটির জন্য নির্দিষ্ট রত্ন এবং লোড কোডটি ইনস্টল করে রাখবেন এইভাবে বান্ডেলরটি আপনার রেল অ্যাপগুলিতে আপনার সমস্ত রত্নের জন্য কোড লোড করবে এবং আপনি যে কোনও পদ্ধতিতে কল করতে পারবেন কোনও ব্যথা ছাড়াই কোনও রত্ন থেকে, যেমন আপনি বেশিরভাগ সময় করেন।

তবে রত্নগুলির মতো whenever, faker or capistrano এমন একটি জিনিস যা আপনার অ্যাপ্লিকেশন কোডে আপনার প্রয়োজন হয় না যখনই যখন আপনার schedule.rb ফাইলের কোডগুলি ক্রোন এবং ক্যাপিস্ট্রানো কোড পরিচালনা deploy.rb করতে থাকে যাতে মোতায়েনের রেসিপিটি কাস্টমাইজ করতে পারে তাই আপনার অ্যাপ্লিকেশন কোডটিতে এবং এই যেখানেই আপনি এই রত্নগুলির জন্য কোড লোড করার দরকার নেই need এই রত্নগুলি থেকে যে কোনও পদ্ধতিতে কল করতে চান আপনি নিজেরাই এই মণি নিজেই লাগাতে পারেন require "whenever" । সুতরাং আপনি :require => falseএই রত্নগুলির জন্য আপনার জেমফাইলে রেখেছেন, এইভাবে বান্ডিলার সেই রত্নটি ইনস্টল করবে তবে সেই রত্নটির জন্য কোড লোড করবে না, আপনি যখনই চান কেবল যখন আপনার প্রয়োজনে 'যখনই' প্রয়োজন রেখে এটি করতে পারেন।


2

আপনার জেমফাইলে রত্নগুলির প্রয়োজনের জন্য আপনাকে কল করতে হবে Bundler.require

আপনি বান্ডিলারের সাথে রত্নটির প্রয়োজনীয়তা রোধ করতে পারেন require: false, তবে এটি এখনও রত্নটি ইনস্টল এবং রক্ষণাবেক্ষণ করবে। পরীক্ষা করে দেখুন এই আউট আরো বিস্তারিত ব্যাখ্যার জন্য।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.