У меня есть задача rake, которая вызывает другие задачи rake, поэтому мои данные разработки можно легко сбросить.
первая задача с граблями (lib / tasks / populate.rake)
# Rake task to populate development database with test data
# Run it with "rake db:populate"
namespace :db do
desc 'Erase and fill database'
task populate: :environment do
...
Rake::Task['test_data:create_company_plans'].invoke
Rake::Task['test_data:create_companies'].invoke
Rake::Task['test_data:create_users'].invoke
...
end
end
вторая задача с граблями (lib / tasks / populate_sub_scripts / create_company_plans.rake)
namespace :test_data do
desc 'Create Company Plans'
task create_company_plans: :environment do
Company::ProfilePlan.create!(name: 'Basic', trial_period_days: 30, price_monthly_cents: 4000)
Company::ProfilePlan.create!(name: 'Professional', trial_period_days: 30, price_monthly_cents: 27_500)
Company::ProfilePlan.create!(name: 'Enterprise', trial_period_days: 30, price_monthly_cents: 78_500)
end
end
когда я запускаю bin / rake db: populate, я получаю эту ошибку
грабли прерваны! LoadError: невозможно автозагрузить константу Company :: ProfilePlan, ожидалось, что /home/.../app/models/company/profile_plan.rb ее определит
но когда я запускаю вторую задачу грабли независимо, она работает хорошо.
Модель (путь: /home/.../app/models/company/profile_plan.rb)
class Company::ProfilePlan < ActiveRecord::Base
# == Constants ============================================================
# == Attributes ===========================================================
# == Extensions ===========================================================
monetize :price_monthly_cents
# == Relationships ========================================================
has_many :profile_subscriptions
# == Validations ==========================================================
# == Scopes ===============================================================
# == Callbacks ============================================================
# == Class Methods ========================================================
# == Instance Methods =====================================================
end
Rails 5.0.1 Ruby 2.4.0
Приложение было обновлено с 4.2 до 5.
Это работает, когда мне нужен весь путь:
require "#{Rails.root}/app/models/company/profile_plan.rb"
Но мне это кажется странным, потому что в сообщении об ошибке rails указан правильный путь к Модели. Кто-нибудь знает, почему мне нужно запрашивать файл при вызове из другой задачи rake?
Большое Вам спасибо
/home/.../app/models/company/profile_plan.rb
верно? - person mikdiet   schedule 15.01.2017module Company class ProfilePlan < ...
- person taro   schedule 20.01.2017