Ответ 1
Выяснилось, задача должна выглядеть так:
namespace :test do
task :new_task => :environment do
puts Parent.all.inspect
end
end
Обратите внимание на зависимость => :environment
, добавленную к задаче
Я пытаюсь создать пользовательскую задачу 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, которые не настроены и т.д.)
Когда вы начинаете писать свои задачи rake, используйте генератор для их вырезания.
Например:
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
Все ваши модели рельсов и т.д. будут доступны для текущей среды изнутри каждого блока задач, если вы не используете среду production, и в этом случае вам потребуются конкретные модели, которые вы хотите использовать. Сделайте это в рамках задачи. (IIRC это зависит от разных версий Rails.)
Правильно вызывается зависимость среды:, но rake все еще может не знать о других драгоценных камнях, от которых зависят ваши модели - в одном моем случае "protected_attributes".
Ответ на запуск:
bundle exec rake test:new_task
Это гарантирует, что среда включает любые драгоценные камни, указанные в вашем Gemfile.