Предоставляют ли рейки рейк-задачи доступ к моделям ActiveRecord?

Я пытаюсь создать пользовательскую задачу rake, но, похоже, у меня нет доступа к моим моделям. Я думал, что это было неявно включено в задачу rails.

У меня есть следующий код в 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 это зависит от разных версий Rails.)

Зависимость от состояния довольно корректно вызывается, но rake все еще может не знать о других драгоценных камнях, от которых зависят ваши модели – в одном моем случае – protected_attributes.

Ответ заключается в том, чтобы запустить:

 bundle exec rake test:new_task 

Это гарантирует, что среда включает любые драгоценные камни, указанные в вашем Gemfile.

С новым синтаксисом хеша rubyа (Ruby 1.9) среда будет добавлена ​​так же к задаче грабли:

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

Как я могу использовать ssh для запуска команды на удаленном компьютере Unix и выйти до завершения команды?

Как использовать пиво Python в качестве Python по умолчанию?

Вырезать последние 30 секунд концы видео с помощью ffmpeg в пакетном файле в Windows

Неожиданный токен “CREATE TRIGGER

Удаление нескольких файлов из репозитория Git, которые уже были удалены с диска

Гарантируется ли сборщик мусора перед ошибкой вне памяти?

Остановить chkdsk, когда Windows 7 на одном диске и Windows 8 на другом

push_back vs emplace_back

ObservableCollection Не поддерживает метод AddRange, поэтому я получаю уведомление для каждого добавленного элемента, кроме того, что касается INotifyCollectionChanging?

Что плохого в встроенном CSS?

Что означает «… разрешает немодульный объект и не может быть импортировано с использованием этой конструкции» означает?

Как закрыть все действия моего приложения?

Фокусируемая строка внутри таблицы android

jQuery отправляет действительный json в тело запроса

Позиционирование MKMapView для одновременного отображения нескольких аннотаций

Давайте будем гением компьютера.