বান্ডেল এক্সেক রেক মানে কি?


350

কী bundle exec rake db:migrateমানে? নাকি শুধু bundle exec rake <command>সাধারণভাবে?

আমি বুঝতে পারি যে bundleজেমফাইলে জিনিসগুলি বজায় রাখার যত্ন নেয়। "এক্সিকিউট" শব্দের অর্থ আমি জানি। আমি বুঝতে পারি যে rakeআপনি করতে পারেন এমন বিভিন্ন স্ক্রিপি জিনিসগুলি বজায় রাখে এবং আমি জানি যে এটির db:migrateমধ্যে একটি। আমি শুধু জানি না এই সমস্ত শব্দ একসাথে কী করছে। ডেটাবেস স্থানান্তরিত bundleকরতে কার্যকর rakeকরতে কেন ব্যবহার করা উচিত ?

উত্তর:


468

bundle execবর্তমান বান্ডেল (আপনার ডিরেক্টরিতে জেমফাইল থেকে একটি ) এর প্রসঙ্গে একটি স্ক্রিপ্ট কার্যকর করতে একটি বান্ডিলার কমান্ড । স্ক্রিপ্ট যেখানে ডিবি নাম স্থান এবং স্থানান্তর হ'ল কার্য নাম সংজ্ঞায়িত করা হয়।rake db:migrate

সুতরাং বর্তমান বান্ডেলের প্রসঙ্গে bundle exec rake db:migrateকমান্ডটি দিয়ে রেক স্ক্রিপ্ট কার্যকর db:migrateকরে।

"কেন?" আমি বান্ডেল পৃষ্ঠা থেকে উদ্ধৃতি করব :

কিছু ক্ষেত্রে, এক্সিকিউটেবল bundle execআপনার সিস্টেমে ইনস্টল করা হতে পারে এবং আপনার বান্ডেলের সাথে বিরোধপূর্ণ কোনও রত্ন না টানলে, এক্সিকিউটেবল ছাড়া চলমান কাজ করতে পারে।

তবে এটি অবিশ্বাস্য এবং যথেষ্ট ব্যথার উত্স। এমনকি দেখে মনে হচ্ছে এটি কাজ করে, ভবিষ্যতে বা অন্য কোনও মেশিনে এটি কাজ করতে পারে না।


7
এর অর্থ কি আমাদের সর্বদা বান্ডিল এক্সিকিউট চালানো উচিত, আমি রবিতে রুবি এবং রুবি ইনস্টল করতে রুবি সংস্করণ পরিচালক ব্যবহার করেছি।
প্রদীপ শর্মা

11
@ এডমন্ড এ "বান্ডেল" একটি ইংরেজি শব্দ, যার অর্থ একই ধরণের একটি গ্রুপ, সাধারণত ঝরঝরে বাঁধা হয়। বিশেষ করে এই প্রশ্নের, এটা রত্ন একদল বোঝায় (স্বয়ংসম্পূর্ণ রুবি কোড লাইব্রেরি।) Bundler সফ্টওয়্যার যা আমরা রত্ন পরিচালনা করতে এখানে ব্যবহার করছেন নাম। এবং bundleহ'ল কমান্ড যা বান্ডলার ব্যবহার করে।
ghoppe

2
আমার ধারণা আছে যে আমরা যখনই জেমফাইলে কোনও ফোল্ডারে সিডি করি তখন শেলটি স্বয়ংক্রিয়ভাবে জেমফাইলে বর্ণিত সংস্করণগুলি ব্যবহার করে (যেমন রুবি সংস্করণ)। এই অনুমানের উপর ভিত্তি করে, আমি ভেবেছিলাম রেক ডিবি: মাইগ্রেট করা বান্ডেল এক্সেক ছাড়া সর্বদা সূক্ষ্মভাবে চলবে। সিএমআইআইডাব্লু
ফিকরি আউলিয়া

1
.ruby-gemsetআপনার প্রকল্পের মূলটিতে যদি আপনার কাছে একটি ফাইল থাকে তবে কেবল পহলেভি ফিকরি আউলিয়া এটি সত্য । .ruby-versionআরভিএম ব্যবহার করে এমন একটি ফাইল রয়েছে যা আপনার রুবি সংস্করণ সেট করে।
ক্যাটফিশ

1
লিঙ্কযুক্ত পৃষ্ঠাটি আপনার উল্লেখ করা উদ্ধৃতিটির আর উল্লেখ করে না। দয়া করে ঠিক করুন, ধন্যবাদ।
গৌরাঙ্গ ট্যান্ডন

153

আপনি bundle execএকটি প্রোগ্রামে চলছে । রত্নগুলির নির্দিষ্ট সংস্করণ উপলব্ধ থাকাকালীন প্রোগ্রামটির নির্মাতারা এটি লিখেছিলেন। গেমফিল প্রোগ্রামটি নির্মাতারা যে রত্নগুলি ব্যবহার করার সিদ্ধান্ত নিয়েছিলেন তার সংস্করণগুলি নির্দিষ্ট করে। অর্থাৎ, এই রত্ন সংস্করণগুলির বিরুদ্ধে সঠিকভাবে চালনার জন্য স্ক্রিপ্টটি তৈরি করা হয়েছিল।

আপনার সিস্টেম-ব্যাপী জেমফিল এই জেমফাইল থেকে পৃথক হতে পারে। আপনার আরও নতুন বা পুরানো রত্ন থাকতে পারে যার সাহায্যে এই স্ক্রিপ্টটি ভাল খেলছে না। সংস্করণগুলির মধ্যে এই পার্থক্য আপনাকে অদ্ভুত ত্রুটি দিতে পারে।

bundle execআপনাকে এই ত্রুটিগুলি এড়াতে সহায়তা করে। এটি স্ক্রিপ্টের জেমফিলের পরিবর্তে সিস্টেমওয়াইড জেমফিলের পরিবর্তে স্ক্রিপ্টের রত্ন ব্যবহার করে স্ক্রিপ্টটি কার্যকর করে। এটি শেল এলিয়াসের যাদু দ্বারা নির্দিষ্ট রত্ন সংস্করণগুলি কার্যকর করে।

ম্যান পৃষ্ঠাতে আরও দেখুন ।

জেমফিলের উদাহরণ এখানে:

source 'http://rubygems.org'

gem 'rails', '2.8.3'

এখানে, bundle exec রেল সংস্করণ ২.৮.৩ ব্যবহার করে স্ক্রিপ্টটি কার্যকর করা হবে এবং আপনি সিস্টেম-ওয়াইড ইনস্টল করে থাকতে পারেন এমন কোনও অন্যান্য সংস্করণ নয়।


9
আমি এই উত্তরটি ওপি দ্বারা নির্বাচিত চেয়ে ভাল পছন্দ করি: ডি! আরও অনেক পরিষ্কার।
mauricioschneider

1
সুতরাং এই উদাহরণটি যুক্ত করার জন্য: যদি ব্যক্তিটি কেবল rake db:migrateবাইরে চলে যায় bundle execতবে এটি সিস্টেমওয়াইড জেমফাইল ব্যবহার করে মৃত্যুদন্ড কার্যকর করতে পারে যেখানে একজনের 1.5-2 রেট থাকতে পারে (সর্বশেষ)?
স্মোকিন জো

আরও ভাল উত্তর, কংক্রিট উদাহরণ সহ।
আহ্নবিজক্যাড

2
সুতরাং bundle execআপনার অ্যাপের জেমফাইলে "অ্যাপ্লিকেশন-নির্দিষ্ট", স্থানীয় রত্ন bundleব্যবহার করে এবং যদি আপনি তা করেন তবে "মেশিন-নির্দিষ্ট", গ্লোবাল রত্ন ব্যবহার করে gem install a_certain_gem। স্থানীয় বনাম গ্লোবাল
আহ্নবিজক্যাড

নির্বাচিতটির চেয়ে অনেক বেশি ভাল উত্তর।
বুন

9

আপনার রত্ন ফাইলটি আপনার মেশিনে রত্নগুলির বিভিন্ন সংস্করণ ইনস্টল করলে এটি অনেকটা আসে। রেক চালানোর পরে আপনি একটি সতর্কতা পেতে পারেন (বা আরএসপেক বা অন্যান্য) যেমন:

You have already activated rake 10.3.1, but your Gemfile requires rake 10.1.0. Prepending "bundle exec" to your command may solve this.

প্রিপারিং bundle execসংস্করণ পার্থক্য নির্বিশেষে এই কমান্ডটি সম্পাদন করতে বান্ডলারকে বলে। এখানে সবসময় কোনও সমস্যা হয় না, তবে আপনি সমস্যার মধ্যে পড়ে যেতে পারেন।

ভাগ্যক্রমে, একটি মণি এটি সমাধান করে: রুবিজেমস-বান্ডলার ler

$ gem install rubygems-bundler

$ $ gem regenerate_binstubs

তারপরে আপনার রেক, আরএসপেক বা যা যা আবার চেষ্টা করুন।


2020 এ এখনও একটি দুর্দান্ত সমাধান
ব্রেটেক

6

সম্ভবত এটি উল্লেখ করা উচিত, বাদ দেওয়ার উপায় রয়েছে bundle exec(সেগুলি রেল টিউটোরিয়ালে মাইকেল হার্টলস রুবির অধ্যায় 3.6.1 এ বর্ণিত হয়েছে) বইয়ের )।

সবচেয়ে সহজ হ'ল কেবলমাত্র আরভিএম (> = 1.11.x) এর যথেষ্ট পরিমাণে আপ-টু-ডেট সংস্করণ ব্যবহার করা।

আপনি যদি আরভিএম এর পূর্ববর্তী সংস্করণে সীমাবদ্ধ থাকেন তবে আপনি সর্বদা এই পদ্ধতিটি ক্যালেসার দ্বারা উল্লিখিতও ব্যবহার করতে পারেন :

$ rvm get head && rvm reload
$ chmod +x $rvm_path/hooks/after_cd_bundler
$ bundle install --binstubs=./bundler_stubs

bundler_stubsডিরেক্টরি তারপর এছাড়াও যোগ করা উচিত.gitignore ফাইল।

তৃতীয় বিকল্পটি হ'ল আপনি rubygems-bundlerআরভিএম ব্যবহার না করে থাকলে রত্নটি ব্যবহার করুন:

$ gem install rubygems-bundler
$ gem regenerate_binstubs

1

আপনি যখন সরাসরি রেক টাস্কটি চালান বা কোনও রত্নের কোনও বাইনারি ফাইল সম্পাদন করেন, কমান্ডটি প্রত্যাশা অনুযায়ী আচরণ করবে এমন কোনও গ্যারান্টি নেই। কারণ এটি ঘটতে পারে যে আপনি ইতিমধ্যে আপনার সিস্টেমে একই রত্ন ইনস্টল করেছেন যার সংস্করণ 1.0 আছে তবে আপনার প্রকল্পে আপনার উচ্চতর সংস্করণ 2.0 বলে। এই ক্ষেত্রে আপনি কোনটি ব্যবহার করা হবে তা অনুমান করতে পারবেন না।

পছন্দসই রত্ন সংস্করণ প্রয়োগ করতে আপনি সহায়তা গ্রহণ করেন bundle exec কমান্ডের নেন যা বর্তমান বান্ডেলের প্রসঙ্গে বাইনারি কার্যকর করবে। এর অর্থ আপনি যখন বান্ডেল এক্সিকিউট করবেন তখন বান্ডেলর বর্তমান প্রকল্পের জন্য কনফিগার করা রত্ন সংস্করণ পরীক্ষা করে এবং এটি কার্য সম্পাদন করতে ব্যবহার করে।

আমি এটি সম্পর্কে একটি পোস্টও লিখেছি যা এটিও দেখায় যে আমরা কীভাবে বিন স্টাবগুলি ব্যবহার করে এড়াতে পারি।


1

আমি খুব bundle execবেশি ব্যবহার করি নি , তবে এটি এখন সেট আপ করছি।

আমার কাছে এমন উদাহরণ রয়েছে যেখানে ভুল রেক ব্যবহার করা হয়েছিল এবং সমস্যাটি সন্ধান করতে অনেক সময় অপচয় করা হয়েছিল। এটি আপনাকে এড়াতে সহায়তা করে।

আরভিএম কীভাবে সেট আপ করবেন তা আপনি এখানে ব্যবহার করতে পারেন bundle exec নির্দিষ্ট প্রকল্প ডিরেক্টরিতে ডিফল্টরূপে :

https://thoughtbot.com/blog/use-bundlers-binstubs


0

এর অর্থ হ'ল রেক ব্যবহার করুন যা বান্ডলার যে কোনও রকের উপরে বেন্ডার সচেতন এবং আপনার জেমফিলের একটি অংশ যা বান্ডলার ডিবি: মাইগ্রেট টাস্ক সম্পর্কে অবগত নয় এবং চালনা করে না over

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