gpt4 book ai didi

ruby-on-rails - 调用 rake 任务时无法加载命名空间模型

转载 作者:数据小太阳 更新时间:2023-10-29 07:35:30 24 4
gpt4 key购买 nike

我有一个调用其他 rake 任务的 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

第二个 rake 任务 (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 然后我得到这个错误

rake aborted! LoadError: Unable to autoload constant Company::ProfilePlan, expected /home/.../app/models/company/profile_plan.rb to define it

但是当我独立运行第二个 rake 任务时,它运行良好。

模型(路径:/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

App刚从4.2升级到5

它在我需要整个路径时有效:

require "#{Rails.root}/app/models/company/profile_plan.rb"

但这对我来说似乎很奇怪,因为在错误消息中,rails 有正确的模型路径。有人知道为什么我在从另一个 rake 任务调用时必须要求该文件吗?

非常感谢

最佳答案

好吧,看起来 rake 并不急于加载,所以当您单独调用 create_company_plans.rake 时,它会加载引用的对象,但是当您从另一个 rake 调用它时,它不会知道您将需要它们,因此不会加载它们。

你可以看看这个其他QA这和你的很相似。

我想也许你不需要整个路径,只是:

require 'models/company/profile_plan'

关于ruby-on-rails - 调用 rake 任务时无法加载命名空间模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41665590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com