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



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

在应用程序配置/

。我输入了以下内容:

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

rake任务定义良好,如果从终端

调用它,运行起来不会有问题。
rake init:db_records

但是当放在config/application中。Rb(甚至在任何初始化器/*中)我得到了以下错误:

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

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

谢谢!

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

除非您有很好的理由,否则通常最好遵循Rails提供的约定。

对于将来遇到同样问题的人。

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

在这一点上的好处是,应用程序已经加载,所以你可以访问ActiveRecord函数…

将代码直接放在config/application中。Rb不能工作,因为我的模型还没有加载。

希望对你有帮助!

您的Rake任务(可能)在Rakefile中定义。initializer甚至不知道这个文件的存在,所以它不知道里面的任务。

规避这个问题最简单的方法是这样做:
Dir.chdir(Rails.root) do
  `rake init:db_records`
end

也就是说,将工作目录改为rails根目录,然后运行命令

相关内容

  • 没有找到相关文章