应用程序初始化期间的 Rake 任务 rails

Rake task during application initialization rails

我想在我的应用程序的服务器启动时执行 rake 任务。

在 config/application.rb 中,我输入了以下内容:

if !Rails.env.production?
  Rake::Task[ "init:db_records" ].invoke
end 

rake 任务定义明确,如果我从终端调用它,运行没有问题

rake init:db_records

但是当放在config/application.rb(或者甚至在任何初始值设定项/*)中时,我得到了以下错误。

不知道如何构建任务'init:db_records'

服务器启动时如何执行rake任务?

谢谢!

您的 Rake 任务(可能)在 Rakefile 中定义。 initializer 不知道该文件是否存在,因此它不知道其中的任务。

规避此问题的最简单方法是执行以下操作:

Dir.chdir(Rails.root) do
  `rake init:db_records`
end

也就是把工作目录改成根rails目录,然后运行命令。

Rails 已经有了建立开发数据库的机制 -- rake db:seed。它不会在您启动应用程序时自动 运行,但会 运行 作为 rake db:setup 的一部分。

除非你有充分的理由,否则通常最好坚持 Rails 提供的约定。

给以后遇到同样问题的朋友。

我通过在 initializers 目录中创建一个新文件来实现这一点,我在其中放置了 rake 任务的代码。

此时这样做的好处是应用程序已经加载,因此您可以访问 ActiveRecord 函数...

将代码直接放在 config/application.rb 中是行不通的,因为我的模型还没有加载。

希望对您有所帮助!