Rails วิธีเรียกใช้งานคราด


98

ฉันจะเรียกใช้ไฟล์คราดนี้ในเทอร์มินัล / คอนโซลได้อย่างไร

statistik.rake ของฉันใน lib / งาน

desc "Importer statistikker"
namespace :reklamer do
  task :iqmedier => :environment do
    ...
  end
  task :euroads => :environment do
    ...
  end
  task :mikkelsen => :environment do
    ...
  end
  task :orville => :environment do
    ...
  end
end

คำตอบ:


134

คุณสามารถเรียกใช้งาน Rake จากเชลล์ของคุณโดยเรียกใช้:

rake task_name

ในการเรียกใช้จาก Ruby (เช่นในคอนโซล Rails หรืองาน Rake อื่น):

Rake::Task['task_name'].invoke

ในการรันงานหลายงานในเนมสเปซเดียวกันด้วยงานเดียวให้สร้างงานใหม่ต่อไปนี้ในเนมสเปซของคุณ:

task :runall => [:iqmedier, :euroads, :mikkelsen, :orville] do
  # This will run after all those tasks have run
end

1
ฉันจะคราดงานทั้งหมดพร้อมกันได้อย่างไรหรือฉันต้องเปลี่ยนเนมสเปซเป็นงาน
Rails เริ่มต้น

1
หากคุณต้องการรันงานทั้งหมดในครั้งเดียวให้ทำ task: all => [: a,: b,: c] จากนั้นเรียกใช้ rake reklamer: all
Spike Gronim

1
นั่นไม่ใช่ส่วนหนึ่งของคำถามของคุณ แต่คุณต้องทำภารกิจใหม่ที่เรียกพวกเขาแต่ละคนซึ่งมีชวเลข ดูคำตอบที่อัปเดตของฉัน
Andrew Marshall

1
@Andrew Marshall คุณสามารถใช้task :runall => Rake::Task.tasksถ้าคุณต้องการเรียกใช้งานทั้งหมด แต่บรรทัดนี้จะต้องประกาศหลังจากงานทั้งหมด
Vasiliy Ermolovich

งานควร: runall => ไปที่ไหน
ทางรถไฟเริ่มต้น

25
Rake::Task['reklamer:orville'].invoke

หรือ

Rake::Task['reklamer:orville'].invoke(args)

วิธีนี้ใช้ได้ผล แต่ @ andrew-marshall เป็นวิธีที่ "ถูกต้อง" ในการรวมกลุ่มงาน raks
Tom Harrison

3
โปรดระบุข้อมูลอ้างอิงหากคุณกำลังจะพูดอะไรบางอย่างเช่น "วิธีที่ถูกต้อง" ... " คำตอบของฉันคือคำตอบสำหรับคำถามเดิม
Luke W

3
จากการทดสอบทางทฤษฎีฉันลองรันRake::Task['db:seed'].invokeแต่มันไม่ทำงานโดยพูดว่า "Don't know how to build task 'db: seed'"
lulalala

22

คุณลองrake reklamer:iqmedierหรือยัง?

งานคราดที่กำหนดเองของฉันอยู่ในไดเร็กทอรี lib ไม่ใช่ใน lib / งาน ไม่แน่ใจว่าสำคัญหรือไม่


1
ฉันต้องการทำงานทั้งหมดในครั้งเดียว
Rails เริ่มต้นเมื่อ

14

บางครั้งงานคราดของคุณไม่ได้รับการโหลดในคอนโซลในกรณีนี้คุณสามารถลองใช้คำสั่งต่อไปนี้

require "rake"
YourApp::Application.load_tasks
Rake::Task["Namespace:task"].invoke

คำพูดเหล่านั้นไม่ดี แต่ฉันไม่สามารถแก้ไขได้เนื่องจากมีการแก้ไขน้อยเกินไป!
จมูก

ทั้งที่นี่ไม่ใช่คำตอบที่แท้จริงสำหรับคำถามที่ถาม นี่คือสิ่งที่ฉันกำลังมองหาและแก้ไขปัญหาของฉัน (YourApp :: Application.load_tasks) ขอบคุณ!
Dennis van de Hoef

4

หากคุณไม่แน่ใจว่าจะรันงานคราดอย่างไรให้ค้นหาก่อนว่าคุณมีงานอะไรและจะแสดงรายการคำสั่งเพื่อรันงาน

รันrake --tasksบนเทอร์มินัล

จะแสดงรายการงานดังต่อไปนี้:

rake gobble:dev:prime             
rake gobble:dev:reset_number_of_kits                                    
rake gobble:dev:scrub_prod_data

จากนั้นคุณสามารถรันงานของคุณด้วย: rake gobble:dev:primeตามรายการ


1

ในราง 4.2 วิธีการข้างต้นไม่ได้ผล

  1. ไปที่ Terminal
  2. เปลี่ยนไดเร็กทอรีไปยังตำแหน่งที่มีไฟล์คราดของคุณอยู่
  3. เรียกใช้คราด task_name
  4. ในกรณีข้างต้นเรียกใช้ rake iqmedier - จะรันเฉพาะงาน iqmedir
  5. เรียกใช้ rake euroads - จะรันเฉพาะงาน euroads เท่านั้น
  6. ในการรันงานทั้งหมดในไฟล์นั้นให้กำหนดสิ่งต่อไปนี้ภายในไฟล์เดียวกันและเรียกใช้คราดทั้งหมด

    task :all => [:iqmedier, :euroads, :mikkelsen, :orville ] do #This will print all the tasks o/p on the screen 
    end
    
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.