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