[ruby-on-rails] 레일 레이크 작업이 ActiveRecord 모델에 대한 액세스를 제공합니까?

사용자 정의 레이크 작업을 만들려고하는데 모델에 액세스 할 수없는 것 같습니다. 나는 이것이 레일 작업에 암시 적으로 포함 된 것이라고 생각했습니다.

lib / tasks / test.rake에 다음 코드가 있습니다.

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)

어떤 아이디어? 감사



답변

알아 낸 작업은 다음과 같습니다.

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

=> :environment작업에 추가 된 종속성을 확인하십시오.


답변

구성이 필요할 수 있습니다 (필수 모델 모두 지정해야 함).

예 :

require 'config/environment'

또는 별도로 별도로 필요하지만 환경 문제 AR이 설정되지 않은 경우 등)


답변

레이크 작업 작성을 시작할 때 생성기를 사용하여 스텁을 제거하십시오.

예를 들면 다음과 같습니다.

rails g task my_tasks task_one task_two task_three 

lib / tasks라는 스텁 my_tasks.rake(명확하게 자신의 네임 스페이스 사용)을 만들 수 있습니다.

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

프로덕션 환경을 사용하지 않는 한 사용 하려는 특정 모델이 필요한 경우 가 아니면 각 작업 블록 내에서 현재 환경에 대한 모든 레일 모델 등을 사용할 수 있습니다. 작업 본문 내에서이 작업을 수행하십시오. (IIRC는 레일 버전에 따라 다릅니다.)


답변

새로운 루비 해시 구문 (Ruby 1.9)을 사용하면 다음과 같은 환경이 레이크 작업에 추가됩니다.

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


답변

: environment 의존성은 꽤 정확하게 호출되지만, 레이크는 모델이 의존하는 다른 gem에 대해서는 여전히 알지 못할 수도 있습니다-내 경우에는 ‘protected_attributes’

대답은 다음과 같습니다.

bundle exec rake test:new_task

이를 통해 환경에 Gemfile에 지정된 보석이 포함됩니다.


답변

아래 명령을 사용하여 작업을 생성하십시오 (작업 이름이있는 네임 스페이스).

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


답변