कंसोल से रेक कार्य कैसे चलाएं?


84

मैं कंसोल से अपने रेक कार्य को लागू करना चाहता हूं। क्या यह करने योग्य है? यदि हाँ, तो कैसे करें?

मैंने कंसोल पर यह कोशिश की:

require 'rake'
Rake::Task['my_task'].invoke

लेकिन यह मुझे यह त्रुटि देता है:

RuntimeError: Don't know how to build task

यह ऐसा है जैसे रेक को कार्य नहीं मिला।

किसी भी सहायता की सराहना की जाएगी।

धन्यवाद

संपादित करें: मैं 2.3.5 रेल का उपयोग कर रहा हूं

जवाबों:


188

अपने रेक कार्यों को चलाने के लिए दो चरणों की आवश्यकता होती है:

  1. लोड हो रहा है रैक
  2. अपने रेक कार्यों को लोड कर रहा है

आपको दूसरा चरण याद आ रहा है।

आम तौर पर यह Rakefile में किया जाता है, लेकिन आपको इसे मैन्युअल रूप से यहां करना होगा:

require 'rake'
Rails.application.load_tasks # <-- MISSING LINE
Rake::Task['my_task'].invoke

2
अधिक विकल्पों के लिए कृपया stackoverflow.com/questions/577944/…
Jahan

7
आप कहने के बीच के अंतर को नोट करना चाह सकते हैं .invokeऔर .execute, यदि आपको कई बार कार्य चलाने की आवश्यकता है (जैसे कि एक ऐप के साथ एक डेटा सनिटी चेकर जो शुरू होने में बहुत लंबा समय लेता है) तो आप .executeकार्य करना चाहेंगे ।
म्यू बहुत कम है '

3
यदि आपको तर्क पारित करने की आवश्यकता है, तो इसे आह्वान विधि में करें:.invoke(arg1, arg2,...)
नूनो सिल्वा

14

इसे करने का सबसे आसान तरीका है irb से % x [ कमांड ] चलाना । मुझे यकीन नहीं है कि आप क्या हासिल करना चाहते हैं।

%x[rake db:migrate]

संपादित करें: मैं अत्यधिक उपयोग करने की सलाह देता हूं .invokeक्योंकि डैनियल स्वीकृत उत्तर में कहता है।


1
समस्या यह है, रेक मेरे काम को पहचानता नहीं है। किसी भी विचार क्यों?
फजरामफ

यह पूरी तरह से @garno काम करता है! क्षमा करें, मुझे पता है कि एक साल हो गया है और अचानक मैं उसी जरूरत में भाग रहा हूं।
फजर्मफ

2
यदि आप चाहें तो आप इसे बैक टिक्स में भी घेर सकते हैं।
सैम सॉफिस

यह धीमा है क्योंकि इसे एक नई प्रक्रिया को स्पिन करना है और अपने रेल एप्लिकेशन को फिर से चालू करना है। invokeबेहतर और अधिक कुशल है।
जोशुआ पिंटर

9

आसान तरीका है:

Rails.application.load_tasks
Rake::Task['my_task'].invoke

यह न केवल आसान तरीका है, बल्कि इसका मतलब है कि आप एक नई प्रक्रिया को नहीं बढ़ा रहे हैं और अपने रेल एप्लिकेशन को फिर से शुरू कर रहे हैं। आसान और तेज़!
जोशुआ पिंटर

2

मैं उपयोग कर रहा हूं rails 5.x.x, और उसी रूप में करने की आवश्यकता थी rails console
मैंने यहां रेक टास्क बनाया है-

app/lib/task_to_execute.rake

यहाँ मेरे लिए काम किया आदेश है-

भार Rails.application.load_tasks

Rake::Task['task_to_execute:task_name'].invoke

मेरे लिए काम किया!


1

बस ध्यान दें कि यदि आप रेल कंसोल में हैं तो आपके माध्यम से rails cबस रेक कार्य विधि को कॉल / रन कर सकते हैंirb(main):001:0> TaskClassName.new.my_task

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.