복붙노트

[RUBY-ON-RAILS] 음주 레이크 작업 액티브 모델에 대한 액세스를 제공 레일?

RUBY-ON-RAILS

음주 레이크 작업 액티브 모델에 대한 액세스를 제공 레일?

나는 사용자 정의 레이크 작업을 만들기 위해 노력하고 있어요,하지만 내 모델에 액세스 할 필요 없다 보인다. 나는 이것이 암시 레일 작업에 포함 된 것을 생각했다.

나는 lib 디렉토리 / 작업 / 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)

어떤 아이디어? 감사

해결법

  1. ==============================

    1.그것을 파악, 작업은 다음과 같은 모양입니다 :

    그것을 파악, 작업은 다음과 같은 모양입니다 :

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

    작업에 추가 환경 의존성 다음 => 공지 사항

  2. ==============================

    2.당신이 당신의 구성을 필요로 할 수도 있습니다 (등 모든 필요한 모델을 지정해야 함)

    당신이 당신의 구성을 필요로 할 수도 있습니다 (등 모든 필요한 모델을 지정해야 함)

    예를 들면 :

    require 'config/environment'
    

    양자 택일로) 당신은 별도로 각을 필요로 할 수 있지만 환경 문제가 등을 설정하지 AR있을 수 있습니다

  3. ==============================

    3.당신이 당신의 레이크 작업을 쓰기 시작할 때, 당신을 위해 그들을 스텁 발전기를 사용합니다.

    당신이 당신의 레이크 작업을 쓰기 시작할 때, 당신을 위해 그들을 스텁 발전기를 사용합니다.

    예를 들면 :

    rails g task my_tasks task_one task_two task_three 
    

    당신은 my_tasks.rake라는 lib 디렉토리 / 작업에서 생성 된 스텁을 얻을 것이다 (분명히 자신의 네임 스페이스를 사용합니다.)과 같이 표시됩니다 어떤 :

    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이 레일의 다른 버전간에 변한다.)

  4. ==============================

    4.새로운 해시 루비 구 (루비 1.9)와 환경 레이크 태스크 같이 첨가한다 :

    새로운 해시 루비 구 (루비 1.9)와 환경 레이크 태스크 같이 첨가한다 :

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

    5.: 환경 의존성이 매우 올바르게 호출되지만 레이크 여전히 모델에 의존한다는 다른 보석에 대해 알고하지 않을 수 있습니다 - 광산, 'protected_attributes'한 경우.

    : 환경 의존성이 매우 올바르게 호출되지만 레이크 여전히 모델에 의존한다는 다른 보석에 대해 알고하지 않을 수 있습니다 - 광산, 'protected_attributes'한 경우.

    대답은 실행하는 것입니다 :

    bundle exec rake test:new_task
    

    환경이 Gemfile에 지정된 보석을 포함이 보장.

  6. ==============================

    6.(작업 이름과 네임 스페이스) 명령 아래 사용하여 작업을 생성합니다 :

    (작업 이름과 네임 스페이스) 명령 아래 사용하여 작업을 생성합니다 :

    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
    
  7. from https://stackoverflow.com/questions/876396/do-rails-rake-tasks-provide-access-to-activerecord-models by cc-by-sa and MIT license