콘솔에서 레이크 작업을 실행하는 방법은 무엇입니까?


84

콘솔에서 레이크 작업을 호출하고 싶습니다. 할 수 있습니까? 그렇다면 어떻게해야합니까?

나는 이것을 콘솔에서 시도했다.

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

하지만이 오류가 발생합니다.

RuntimeError: Don't know how to build task

갈퀴가 작업을 찾지 못하는 것과 같습니다.

어떤 도움을 주시면 감사하겠습니다.

감사합니다

편집 : 레일 2.3.5를 사용하고 있습니다.

답변:


188

Rake 작업을 실행하려면 두 단계가 필요합니다.

  1. 레이크 로드
  2. 레이크 작업 로드

두 번째 단계를 놓치고 있습니다.

일반적으로 이것은 Rakefile에서 수행되지만 여기서 수동으로 수행해야합니다.

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


7
당신은 말의 차이에 유의 할 수 있습니다 .invoke.execute(예 : 시작하는 데 시간이 너무 오래 걸리는 응용 프로그램과 데이터 정신 검사기 등) 작업을 여러 번 실행해야하는 경우를, 다음에 할 것입니다 .execute작업.
MU이 너무 짧

3
당신이 인수를 전달해야하는 경우, invoke 메소드에서 할 :.invoke(arg1, arg2,...)
누누 실바

14

가장 쉬운 방법 은 irb에서 % x [ command ] 를 실행하는 것입니다 . 그래도 무엇을 성취하고 싶은지 잘 모르겠습니다.

%x[rake db:migrate]

편집 :.invoke Daniel이 허용 된 답변에서 말한 것처럼 사용하는 것이 좋습니다 .


1
문제는 레이크가 내 임무를 인식하지 못하는 것 같습니다. 왜 그런지 아세요?
Fajarmf

@garno 완벽하게 작동합니다! 미안해 1 년이 지났는데 갑자기 똑같은 필요가 생겼습니다.
Fajarmf 2012

2
원한다면 백틱으로 둘러 쌀 수도 있습니다.
Sam Soffes

새로운 프로세스를 가동하고 Rails 앱을 다시 인스턴스화해야하기 때문에 속도가 느립니다. invoke더 좋고 효율적입니다.
Joshua Pinter

9

쉬운 방법은 다음과 같습니다.

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

이것은 쉬운 방법 일뿐만 아니라 새로운 프로세스를 회전시키고 Rails 앱을 다시 인스턴스화하지 않음을 의미합니다. 쉬운 빠른!
Joshua Pinter

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.