রুবি স্ক্রিপ্টের ভিতরে ডিরেক্টরি পরিবর্তন করতে?


102

আমি একটি নতুন রেল অ্যাপ্লিকেশন তৈরি করতে চাই এবং সেই অ্যাপ্লিকেশনের জন্য রেলস সার্ভারটি জ্বালিয়ে দিতে চাই, সবকিছু রুবি স্ক্রিপ্ট থেকে।

আমার কোডটি এর মতো দেখাচ্ছে:

#!/usr/bin/env ruby
system "rails new my_app"
system "cd my_app"
system "rails server &"

যাইহোক, "রেল সার্ভার &" চালানোর সময় পথটি আমার_এপ ফোল্ডারে নয়, তবে প্যারেন্ট ফোল্ডারে।

কোনও নতুন স্ক্রিপ্টের ভিতরে ডিরেক্টরি পরিবর্তন করার কোনও উপায় আছে যাতে আমি এই নতুন অ্যাপ্লিকেশনটির জন্য "রেলস সার্ভার", "রাক অ্যাবাউট" এবং "রেক ডিবি: মাইগ্রেট" চালাতে পারি?

টিপস প্রায় সমস্ত কাজ প্রশংসা করা হবে।


6
মনে রাখবেন যে সেরা উত্তরটি চিহ্নিত চিহ্ন নয়। এই পৃষ্ঠার নীচে পড়া চালিয়ে যান।
জেন

উত্তর:


107

ব্যবহার Dir.chdir:

Dir.chdir "my_app"

22
মনে রাখবেন এটি আপনার প্রোগ্রামের বাকী অংশে পার্শ্ব প্রতিক্রিয়া থাকতে পারে। এটি থেকে সম্ভাব্য বাগগুলি এড়াতে অন্যান্য উত্তরগুলি দেখুন।
লিওপড

এটি একটি খারাপ উত্তর। এটি সমস্যা সমাধান করে তবে এর পরে কোডে আপনার সমস্যা হতে পারে। দয়া করে অন্য একটিতে "সেরা উত্তর" পরিবর্তন করতে বিবেচনা করুন (আরও উদ্দীপনা সহ)
এজ

370

তাদের কথা শুনবেন না, Dir.chdir("dir")সম্ভবত ভুল কাজটি করবেন। আপনি প্রায় সবসময় যা চান তা হ'ল পরিবর্তনের কোনও নির্দিষ্ট প্রসঙ্গে সীমাবদ্ধ করা, যেমন এই প্রোগ্রামটির বাকি অংশগুলিকে প্রভাবিত না করে:

#!/usr/bin/env ruby
system "rails new my_app"
Dir.chdir("my_app") do
  system "rails server &"
end
# back where we were, even with exception or whatever

একটি থ্রেডযুক্ত অ্যাপ্লিকেশন যেমন ব্লক ব্যবহার করে যা খুব বেশি সাবধানতা অবলম্বন করুন side জাস্ট এবং এফওয়াইআই :)
অন্টওয়প্পঞ্চ

@ জিরিয়ানক্যান্টি যদি আমি একটি থ্রেড তৈরি করি এবং এই উত্তরের মতো ডিরেক্টরি পরিবর্তন করি তবে "পার্শ্ব প্রতিক্রিয়াগুলি" কী কী? (আমি সাইডকিক, স্রেফ Threadক্লাস ব্যবহার করব না )

4
পার্শ্ব প্রতিক্রিয়াগুলি কী কী তা সম্পর্কে আমিও কৌতূহলী (কোনও পদ্ধতি ব্যবহার না করে)। আপনি যদি কর্ম ডিরেক্টরিটি পরিবর্তন করেন তবে আপনি সর্বদা এটি পরিবর্তন করতে পারবেন, তাই না?
স্টিভেক

আপনি যা করতে পারবেন না এমন কোনও সময় জানেন না ... কেবল করুন original_directory = Dir::pwd, পরে এর পরে ভেরিয়েবলটি স্মরণ করুন:Dir::chdir(original_directory)
পোয়েদা

11

সিস্টেম সমর্থন করে: chdir আর্গুমেন্ট যা আপনাকে এর কার্যকারী ডিরেক্টরিটি নির্দিষ্ট করতে দেয়:

system("echo Test; pwd", chdir: '/tmp')

আউটপুট '/ টিএমপি'


3

Dir.chdirস্ক্রিপ্টের জন্য ওয়ার্কিং ডিরেক্টরি পরিবর্তন করতে ব্যবহার করুন ।



1

আপনি কেন এটি ঠিক এভাবে করতে পারবেন না:

#!/usr/bin/env ruby
system 'rails new myapp && cd myapp && rails server &'

4
যখন সিস্টেম কমান্ড ব্যর্থ হয়, তখন যা ভুল হয়েছে তা নির্ণয় করা আরও শক্ত হবে - রেলস অ্যাপটি কি ব্যর্থ হয়েছিল, সিডি ব্যর্থ হয়েছিল, বা রেল সার্ভার ব্যর্থ হয়েছিল?

1

নিম্নলিখিত লাইনগুলির একই আউটপুট রয়েছে:

puts Dir.chdir("/tmp") { IO.popen("ls -la") { |io| io.read } } 

puts IO.popen(["ls", "-la", "/tmp"]).read

puts IO.popen("ls -la /tmp").read

# drwxrwxrwt 25 root       root       16384 июля  23 01:17 .
# drwxr-xr-x 22 root       root        4096 июля  22 13:36 ..
# drwxrwxr-x 12 itsnikolay itsnikolay  4096 июля  19 17:14 app_template
# drwx------  2 itsnikolay itsnikolay  4096 июля  21 15:04 .com.google.Chrome.dThb8f
# drwx------  2 itsnikolay itsnikolay  4096 июля  18 20:55 .com.google.Chrome.FGDBGc

এছাড়াও আপনি রেল চালাতে পারেন এবং একটি অ্যাপ্লিকেশন তৈরি করতে পারেন (এটি আরএসপেক টেস্টগুলিতে সহায়তা করতে পারে এবং ইত্যাদি):

IO.popen("cd /tmp/ && rails new test_app").read

এবং আপনি কখনই রেল সার্ভার চালাতে পারেন;)

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