我想在应用程序的服务器启动时执行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任务的方法是什么?
谢谢!
答案 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中没有用,因为我的模型还没有加载。
希望它会有所帮助!