রেল রাক কার্যগুলি কী অ্যাক্টিভেকর্ড মডেলগুলিতে অ্যাক্সেস সরবরাহ করে?


235

আমি একটি কাস্টম রেক টাস্ক তৈরি করার চেষ্টা করছি, তবে মনে হচ্ছে আমার মডেলগুলিতে আমার অ্যাক্সেস নেই। আমি ভেবেছিলাম এটি রেলের কার্যক্রমে অন্তর্ভুক্ত কিছু ছিল।

আমার কাছে লাইব / টাস্ক / টেস্ট.রেকে নিম্নলিখিত কোড রয়েছে:

namespace :test do
  task :new_task do
    puts Parent.all.inspect
  end
end

এবং এখানে আমার পিতামাতা মডেলটি দেখতে কেমন:

class Parent < ActiveRecord::Base
  has_many :children
end

এটি একটি খুব সহজ উদাহরণ, কিন্তু আমি নিম্নলিখিত ত্রুটি পেয়েছি:

/> rake test:new_task
(in /Users/arash/Documents/dev/soft_deletes)
rake aborted!
uninitialized constant Parent

(See full trace by running task with --trace)

কোন ধারনা? ধন্যবাদ

উত্তর:


410

এটি নির্ধারণ করা, টাস্কটির মতো হওয়া উচিত:

namespace :test do
  task :new_task => :environment do
    puts Parent.all.inspect
  end
end

কার্যটিতে => :environmentনির্ভরতা যুক্ত হওয়া লক্ষ্য করুন


4
এই সিনট্যাক্সের অর্থ কী? এটি new_taskবর্তমান পরিবেশে নির্ধারিত? এর বর্তমান মান কত :environment? গুগল সাহায্য করছে না।
স্কট কোটস

12
@scoarescoare: পরিবেশটি এখানে নির্ভরতা, তাই চলার সময় new_taskপ্রথমে পরিবেশটি লোড করুন (আপনার মডেলগুলি লোড করুন) এবং তারপরে new_task চালান।
বিগপোটাটো

3
@scoarescoare আপনি কাস্টম রেক ডক চেক করতে পারেন , প্রথম উদাহরণটি আপনাকে বলবে
অলস্যাবিওস

সিনাত্রায় একই জিনিস কীভাবে অর্জন করবেন?
এএমবাস্রা

মডেল নামটি সকলের সাথে অনুসরণ করতে হয় এবং এটি টোডলিস্টের মতো কাজ করে না all সমস্ত টোডলিস্ট.ইচ আইডিকে নয় কেন এটি কাজ করে বলে মনে হচ্ছে?
কিক বাটোভস্কি

17

আপনার প্রয়োজন হতে পারে আপনার কনফিগারেশন (যা আপনার প্রয়োজনীয় সমস্ত মডেল ইত্যাদি নির্দিষ্ট করে)

উদাহরণ:

require 'config/environment'

বিকল্পভাবে আপনি কেবল প্রতিটি পৃথকভাবে প্রয়োজন বোধ করতে পারেন, তবে আপনার পরিবেশ সংক্রান্ত সমস্যা থাকতে পারে এআর সেট আপ না করা ইত্যাদি)


5
এটি কাজ করবে, তবে এটি সাধারণভাবে ভাঙ্গবে! এই পরিবর্তনটি যুক্ত করার পরে, কোনও ডিবি উপলব্ধ না করে রাক-টি চেষ্টা করুন। রেক-টি সুখে ডিবিতে অ্যাক্সেসের প্রয়োজন ছাড়াই রেক কাজের একটি তালিকা সরবরাহ করা উচিত!
irkenInvader

1
এটি করার পরে আপনি দেখতে পাবেন যে অ্যাপ্লিকেশন শুরু করার জন্য প্রয়োজনীয় অন্যান্য রেক টাস্ক (যেমন রেক সম্পদ: প্রাকম্পাইল) ব্যর্থ হবে "র‌্যাকটি বাতিল! অ্যাপ্লিকেশন ইতিমধ্যে শুরু হয়েছে"।
ব্রেন্ট

11

আপনি যখন আপনার রকের কাজগুলি লিখতে শুরু করেন, তখন কোনও জেনারেটর ব্যবহার করে সেগুলি আপনার জন্য স্টাব আউট করে।

উদাহরণ স্বরূপ:

rails g task my_tasks task_one task_two task_three 

আপনি lib / কার্যগুলিতে তৈরি একটি স্টাব পাবেন যা my_tasks.rakeস্পষ্টতই নিজের নিজস্ব নামটি ব্যবহার করবে Which যা দেখতে এইরকম হবে:

namespace :my_tasks do

  desc "TODO"
  task :task_one => :environment do 
  end  

  desc "TODO"
  task :task_two => :environment do 
  end  

  desc "TODO"
  task :task_three => :environment do 
  end  

end

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


2
আপনি কেবল এটি বলতে পারেননি যে environmentনির্ভরতা হিসাবে প্রয়োজনীয় এবং তারপরে সিন্টেক্সটি না বলে ওপিকে "যাদু" ইউটিলিটিগুলির উপর নির্ভর করতে উত্সাহিত করার চেয়ে এমনকি কোনও যাদু ব্যবহার করে না?
বালিনকিংঅফ মোরিয়া

3

নতুন রুবি হ্যাশ সিনট্যাক্স (রুবি ১.৯) দিয়ে পরিবেশটিকে রাক টাস্কে এভাবে যুক্ত করা হবে:

namespace :test do
  task new_task: :environment do
    puts Parent.all.inspect
  end
end

2

দ্য: পরিবেশ নির্ভরতা একেবারে সঠিকভাবে ডেকে আনা হয়েছে, তবে রাক এখনও আপনার মডেলগুলির উপর নির্ভরশীল অন্যান্য রত্নগুলি সম্পর্কে জানতে পারে না - আমার একটি ক্ষেত্রে, 'সুরক্ষিত_অগ্রহ'।

উত্তর চালানো হয়:

bundle exec rake test:new_task

এটি গ্যারান্টি দেয় যে পরিবেশটি আপনার জেমফাইলে বর্ণিত কোনও রত্নকে অন্তর্ভুক্ত করে।


1

নীচে কমান্ড ব্যবহার করে টাস্ক তৈরি করুন (টাস্ক নাম সহ নেমস্পেস):

rails g task test new_task

যুক্তি যুক্ত করতে নীচের বাক্য গঠনটি ব্যবহার করুন:

namespace :test do
  desc 'Test new task'
  task new_task: :environment do
    puts Parent.all.inspect
  end
end

নীচের কমান্ডটি ব্যবহার করে উপরের টাস্কটি চালান:

bundle exec rake test:new_task  

অথবা

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