Raylı tırmık görevleri ActiveRecord modellerine erişim sağlıyor mu?


235

Özel bir komisyon görevi oluşturmaya çalışıyorum, ancak modellerime erişimim yok gibi görünüyor. Bunun örtük bir şekilde raylar görevine dahil olduğunu düşündüm.

Ben lib / görevleri / test.rake aşağıdaki kodu var:

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

Ve işte ana modelim şöyle:

class Parent < ActiveRecord::Base
  has_many :children
end

Bu oldukça basit bir örnek, ancak aşağıdaki hatayı alıyorum:

/> rake test:new_task
(in /Users/arash/Documents/dev/soft_deletes)
rake aborted!
uninitialized constant Parent

(See full trace by running task with --trace)

Herhangi bir fikir? Teşekkürler

Yanıtlar:


410

Anladım, görev şöyle görünmeli:

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

=> :environmentGöreve eklenen bağımlılığa dikkat edin


4
bu sözdizimi ne anlama geliyor? new_taskmevcut ortama mı atanıyor ? şu anki değeri :environmentnedir? google yardım etmiyor.
Scott Coates

12
@scoarescoare: ortam burada bağımlılıktır, bu nedenle çalışırken new_task, önce ortamı yükleyin (modellerinizi yükleyin) ve ardından new_task komutunu çalıştırın.
bigpotato

3
@scoarescoare sen özel komisyon doc kontrol edebilirsiniz , ilk örnek size söyleyecektir
lazybios

Sinatra'da aynı şeyi nasıl başarabilirim?
AMBasra

model adı herkes ile takip etmek zorundadır ve TodoList.all.each gibi TodoList.each idk neden çalışmıyor gibi çalışmıyor?
Tekme Buttowski

17

yapılandırmanızı zorunlu kılmanız gerekebilir (bu, gerekli tüm modellerinizi belirtmelidir vb.)

Örneğin:

require 'config/environment'

alternatif olarak her birini ayrı ayrı isteyebilirsiniz, ancak AR kurulmamış vb. ortam sorunlarınız olabilir)


5
Bu işe yarayacak, ancak genel olarak tırmığı kıracak! Bu değişikliği ekledikten sonra, kullanılabilir DB olmadan rake -T'yi deneyin. komisyon -T mutlu DB erişim gerek kalmadan komisyon görevleri bir listesini sağlamalıdır!
irkenInvader

1
Bunu yaptıktan sonra, uygulamanın başlatılmasını gerektiren diğer komisyon görevlerinin (örneğin komisyon varlıkları: ön derleme) "komisyon iptal edildi! Uygulama zaten başlatıldı" ile başarısız olacağını göreceksiniz.
brent

11

Komisyon görevlerinizi yazmaya başladığınızda , bunları sizin için saplamak için bir jeneratör kullanın.

Örneğin:

rails g task my_tasks task_one task_two task_three 

my_tasks.rake(Açıkçası kendi ad alanınızı kullanın) adlı lib / görevlerde oluşturulan bir saplama alacaksınız .

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

Üretim ortamını kullanmıyorsanız, tüm ray modelleri vb. Mevcut ortam için her görev bloğundan kullanılabilir olacaktır; bu durumda kullanmak istediğiniz belirli modellere ihtiyaç duymanız gerekir. Bunu görev içinde yapın. (IIRC, Rails'ın farklı sürümleri arasında değişir.)


2
Sadece environmentbir bağımlılık olarak gerekli olduğunu söyleyebilir ve daha sonra OP'yi sihir bile kullanmayan "sihirli" yardımcı programlara güvenmeye teşvik etmek yerine sözdizimini söyleyebilir misiniz?
BalinKingOfMoria Eski CM'ler

3

Yeni ruby ​​hash sözdizimi (Ruby 1.9) ile ortam, komisyon görevine şu şekilde eklenecektir:

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

2

: Ortam bağımlılığı oldukça doğru bir şekilde çağrılır, ancak tırmık hala modellerinizin bağlı olduğu diğer mücevherleri bilmiyor olabilir - bir durumda, 'korunan_öznitelikler'.

Cevap şu:

bundle exec rake test:new_task

Bu, ortamın Gemfile dosyasında belirtilen mücevherleri içermesini garanti eder.


1

Aşağıdaki komutu kullanarak görev üret (görev adıyla ad alanı):

rails g task test new_task

Mantık eklemek için aşağıdaki sözdizimini kullanın:

namespace :test do
  desc 'Test new task'
  task new_task: :environment do
    puts Parent.all.inspect
  end
end

Aşağıdaki komutu kullanarak görevin üzerinde çalıştırın:

bundle exec rake test:new_task  

veya

 rake test:new_task
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.