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

时间:2015-06-01 20:32:32

标签: ruby-on-rails ruby ruby-on-rails-3 rake rake-task

我想在应用程序的服务器启动时执行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任务的方法是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

Rails已经有了一种设置开发数据库的机制 - 0.071158143395663314294038846164419405590199598107149 -3.386122969689401403435039837396914808444794978187 0.8764330891239492672300640710157085727853216046851 -2.0064145894745984574924806549098893735202520612338 0.35063440434471256645248013148941661436898526919012 -2.6716586312329566575912648384475719362060750451386 0.55126463254396465483421760539251997054451429475851 -1.7729411307129102331140853820760877874503063867511 0.23451591287440404629503274013000569210570783079923 -1.8436859957276497364219420143355960542394553824973 0.67246064287165530800489640577641451760040603708175 -2.7866182566345250589888851601603928202838710045557 0.80792574281283013736403300555330454345085259792047 -0.15055052607056848408105897310815019836250664353778 0.37045508031046743582526542286707476033397122878445 -0.89212086300647281063038787100486855752802424330061 0.057114478905607662739791206480165678105786999645263 -2.6490252463914095599465380526414962516123643879414 0.58651613738479171168557610089809027540801543233291 -0.44308599806450532102588370830806367936934083181489 。启动应用时它不会自动运行,但它确实作为rake db:seed的一部分运行。

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

答案 1 :(得分:0)

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

避免这种情况的最简单方法是做类似的事情:

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

即,将工作目录更改为root rails目录,然后运行命令。

答案 2 :(得分:0)

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

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

此时的优点是应用程序已加载,因此您可以访问ActiveRecord函数...

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

希望它会有所帮助!