我想在应用程序服务器启动时执行一个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根目录,然后运行命令