রেল 3 প্রকল্প থেকে রত্ন আনইনস্টল করার সর্বোত্তম উপায় কী?


102

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

আমি কি সব কিছুর জন্য কেবল মণি আনইনস্টল এক্স ব্যবহার করি? এটি কি বান্ডলারকে বিভ্রান্ত করতে চলেছে?

উত্তর:


136

আপনার অ্যাপ্লিকেশনটির মূল ডিরেক্টরি থেকে বান্ডিলার চালু করা হয়েছে যাতে এটি নিশ্চিত হয় যে আপনার অ্যাপটি কাজ করতে সমস্ত প্রয়োজনীয় রত্ন উপস্থিত রয়েছে some যদি কোনও কারণে আপনাকে আর রত্নের প্রয়োজন না হয় তবে আপনাকে চালনা করতে হবে

    gem uninstall gem_name 

যেমন আপনি উপরে বলেছিলেন o সুতরাং আপনি যখনই বান্ডিলার চালাবেন এটি নির্ভরতাগুলি যাচাই করবে

সম্পাদনা - 24.12.2014

আমি দেখতে পাচ্ছি যে লোকেরা এই প্রশ্নে আসতে থাকে আমি সিদ্ধান্ত নিয়েছিলাম কিছুটা যুক্ত করার। যখন আমি আপনার জহর বিশ্বব্যাপী বজায় রাখি তখন আমি যে উত্তরটি দিয়েছিলাম তার উত্তরটি ছিল। সুনির্দিষ্ট প্রকল্পের জন্য রত্নগুলির সেট রাখতে rbenv বা rvm এর মতো রত্ন ব্যবস্থাপক ব্যবহার করার বিষয়টি বিবেচনা করুন।

এর অর্থ হ'ল বৈশ্বিক স্তরে কোনও রত্ন ইনস্টল করা হবে না এবং তাই আপনি যখন আপনার প্রকল্পের জেমফাইল থেকে একটি সরিয়ে ফেলেন এবং বান্ডেলটি পুনরায় চালু করবেন তখন অবশ্যই এটি আপনার প্রকল্পে লোড হবে না। তারপরে, আপনি বান্ডেল ক্লিন চালাতে পারেন (প্রকল্পের সাথে) এবং এটি সিস্টেম থেকে সেই সমস্ত রত্নগুলি মুছে ফেলা হবে যা একবার আপনার জেমফাইলে ইনস্টল করা হয়েছিল (একই দির মধ্যে) তবে এই নির্দিষ্ট সময়ে আর তালিকাভুক্ত থাকবে না .... দীর্ঘ গল্প সংক্ষিপ্ত - এটি অব্যবহৃত রত্নগুলি সরিয়ে দেয়।


98

এটি বান্ডলার দ্বারা ইনস্টল করা একটি মণি আনইনস্টল করবে:

bundle exec gem uninstall GEM_NAME

নোট করুন যে এটি নিক্ষেপ করে

ত্রুটি: রত্ন সম্পাদন করার সময় ... (NoMethodError) অপরিবর্তিত পদ্ধতিটি # <বান্ডিলার :: এর জন্য মুছুন ': স্পেসসেট: 0x00000101142268>

কিন্তু মণিটি আসলে সরিয়ে ফেলা হয়। পরের বার আপনি bundle installমণিটি চালাবেন আবার ইনস্টল করা হবে।


10
আরভিএম ব্যবহারকারীদের জন্য: আপনি যদি আপনার নির্দিষ্ট প্রকল্পের জন্য একটি রত্ন সেট করে থাকেন তবে আপনাকে এই পদ্ধতিটি ব্যবহার করতে হবে। চলমান gem uninstall pgপ্রকল্প ফোল্ডার থেকে bundler এর পরিবর্তে আপনার বিশ্বব্যাপী / সিস্টেম লেভেলে gemset থেকে PG আনইনস্টল হবে
এরিক হু

আপনি যে ত্রুটিটি উল্লেখ করছেন তা কি এটি? ERROR: While executing gem ... (NoMethodError) undefined method `delete' for #<Bundler::SpecSet:0x00000101142268>
ব্যবহারকারী 664833

এটি বান্ডিল প্রসঙ্গে করার জন্য +1। ইশটা যদি ত্রুটি না ফেলে! আরও ভাল, আশা করি আমি রত্নটির নাম-বান্ডিল করতে পারতাম।
pduey

2
আপনি যদি আরভিএম জেমসেট ব্যবহার করছেন তবে @ এরিকহু না। আপনি যখনই কোনও আরভিএম জেমসেটের অভ্যন্তরে রত্ন ইনস্টল এক্সএক্সএক্সএক্সের সাথে একটি মণি ইনস্টল করেন, সেখানেই এটি থাকে, তাই আরভিএম জেমসেটে একটি সরল রত্ন আনইনস্টল xxx করলে এটি জেমসেটে ইনস্টল করা মণি সরিয়ে ফেলবে, সিস্টেমটি নয়।
এস্তেবান ফিল্ডম্যান

@ ইস্টবেনফিল্ডম্যান আপনি ঠিক বলেছেন, আমি মনে করি এটি গত 11 মাসে আরভিএম-এ পরিবর্তন হয়েছিল।
এরিক হু

21

বান্ডেলারের নতুন সংস্করণ সহ আপনি পরিষ্কার টাস্কটি ব্যবহার করতে পারেন:

$ bundle help clean
Usage:
    bundle clean

Options:
    [--dry-run=only print out changes, do not actually clean gems]
    [--force=forces clean even if --path is not set]
    [--no-color=Disable colorization in output]
    -V, [--verbose=Enable verbose output mode]

Cleans up unused gems in your bundler directory
$ bundle clean --dry-run --force
Would have removed actionmailer (3.1.12)
Would have removed actionmailer (3.2.0.rc2)
Would have removed actionpack (3.1.12)
Would have removed actionpack (3.2.0.rc2)
Would have removed activemodel (3.1.12)
...

সম্পাদনা:

আপনি যদি বিশ্বব্যাপী রত্নটি ব্যবহার করেন তবে এটি প্রস্তাবিত নয় (যেমন - আপনার সমস্ত প্রকল্প তাদের রত্ন একই জায়গায় রাখে)। প্রতিটি প্রকল্পের রত্ন আলাদা রাখার কয়েকটি উপায় রয়েছে, যদিও:

  1. rvmরত্নস্বরূপ ( http://rvm.io/gemsets/basics )
  2. bundle installনিম্নলিখিত বিকল্পগুলির সাথে: --deploymentবা --path=<path>( http://bundler.io/v1.3/man/bundle-install.1.html )

bundle clean --forceআমার বর্তমান প্রকল্পে আমি ব্যবহার করি না তবে আমার অন্যান্য প্রকল্পগুলিতে ব্যবহার করি এমন একগুচ্ছ রত্ন মুছে ফেলা ব্যবহার করে । আমার কি কোনও পথ নির্ধারণ করার কথা ছিল? কেবলমাত্র bundle cleanফেরত দেয় "--পাথ সেট করা থাকে বা - ফোর্স সেট করা থাকলে কেবল বান্ডিল পরিষ্কার ব্যবহার করতে পারে"। কিন্তু --pathবিকল্প এমনকি সহায়তা মনে হচ্ছে না।
ডেনিস

1
এটি সঠিক @ ডেনিস cleanআপনি একটি বিশ্বব্যাপী gemset ব্যবহার করছেন টাস্ক সত্যিই অর্থে দেখা যায় না। তবে আপনি যদি চান তবে আপনার প্রতিটি প্রকল্পের আলাদা আলাদা রত্ন থাকতে পারে। আপনি rvm রত্নগুলি ( rvm.io/gemsets/basics ) এর মাধ্যমে বা রত্নগুলির পথ নির্দিষ্ট করে ( bundler.io/v1.3/man/bundle-install.1.html ) --pathবিকল্পের মাধ্যমে এটি করতে পারেনbundle install
ইভজেনিয়া মানোলোভা

1

রত্ন আনইনস্টল করার জন্য আপনাকে অবশ্যই 'মণি আনইনস্টল রত্ন নাম' ব্যবহার করতে হবে।

মনে রাখবেন যে আপনি যদি মণি সিস্টেম-ব্যাপী ইনস্টল করেন (যেমন। সুডো বান্ডেল ইনস্টল) তবে আপনাকে রত্নভুক্ত বাইনারিগুলি অপসারণ করা হয়েছে তা নিশ্চিত করার জন্য -n বিকল্পটি ব্যবহার করে বাইনারি ডিরেক্টরি নির্দিষ্ট করতে হবে। উদাহরণ স্বরূপ

sudo gem uninstall gem_name  -n /usr/lib/ruby/gems/1.9.1/bin

1

আমি নিজেই ইউনিকর্ন মণিটি বান্ডলার ("সুডো বান্ডলার এক্সিকিউট জহর আনইনস্টল ইউনিকর্ন") এর মাধ্যমে মুছে ফেলার মাধ্যমে এটি সমাধান করেছি বলে মনে করি, তারপরে পুনঃবন্ডলিং ("সুডো বান্ডেল ইনস্টল করুন")।

যদিও এটি ঘটেছে তা নিশ্চিত নয়, যদিও উপরের ফিক্সটি কাজ করে বলে মনে হচ্ছে।



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