Rake 작업 내에서 Rails ActiveRecord 모델에 액세스하는 방법

2570 단어 rubyrailsrake
한동안 Ruby on Rails로 작업했다면 Rake 을 발견했을 것입니다. 작고한 Jim Weirich가 작성한 Rake는 Ruby에서 Make가 C에서 의미하는 것입니다. 사용자 지정 Rake 작업을 생성하여 개발 워크플로를 단순화하는 것은 매우 쉽습니다. Rails는 생성기( rails g task )도 제공하여 이를 생성합니다.

그러나 많은 새로운 Rails 개발자(저 포함)가 Rails를 배울 때 가지고 있는 한 가지 질문은 ActiveRecord 모델에 액세스하거나 데이터베이스 쿼리를 수행하는 데 매우 유용한 Rake 작업에서 Rails 환경에 액세스하는 방법입니다. 이 기사에서는 이를 수행하는 방법을 보여줍니다.

TL; DR


:environment 작업을 사용자 지정 작업에 대한 종속성으로 추가합니다.

task count_users: [:environment] do
  ...
end


긴 답변



다음은 User라는 이름의 ActiveRecord 모델을 사용하려고 시도하는 간단한 Rake 작업입니다.

# lib/tasks/transport.rake

desc "count the number of users in the system"
task :count_users do
  puts User.count
end


이 Rake 작업을 있는 그대로 실행하려고 하면 Rails는 NameError 토큰이 무엇을 가리키는지 모르기 때문에 User 오류를 발생시킵니다.

bin/rails count_users
rails aborted!
NameError: uninitialized constant User

  puts User.count
       ^^^^^^^^^^^^^^^


Rake 작업에서 ActiveRecord 모델을 사용할 수 있도록 하려면 작업을 실행하기 전에 환경을 로드하도록 Rails에 지시해야 합니다. 이는 Rails 콘솔을 시작할 때 발생하는 것과 유사합니다. Rails 환경을 로드하면 ActiveRecord 모델, 데이터베이스 등에 액세스할 수 있습니다.

Rails는 환경을 로드하는 작업:environment을 제공합니다. Rake 용어에서 작업은 작업 전에 수행되어야 하므로 :environment 작업에 종속됩니다.

# lib/tasks/transport.rake

desc "count the number of users in the system"
task count_users: [:environment] do
  puts User.count
end


이제 rake 작업에서 오류 없이 User 모델에 액세스할 수 있습니다.

좋은 웹페이지 즐겨찾기