我有一个Rake任务,它将配置数据从文件加载到DB中,在向上迁移时,是否有正确的ruby/rails方法来调用它?
我的目标是同步我的团队数据库配置,无需广播然后运行任务*啦啦 *
def self.up
change_table :fis_situacao_fiscal do |t|
t.remove :mostrar_endereco
t.rename :serie, :modelo
end
Faturamento::Cfop.destroy_all()
#perform rake here !
end
更新我现在是怎么做的,以及如何工作:
system('rake sistema:load_data file=faturamento/cfop')
这是来自**@Ryan Bigg**的建议,这是例外:
Rake::Task['rake sistema:load_data file=faturamento/cfop'].invoke()
.
== AlterSituacaoFiscalModeloEndereco: migrating ====================
-- change_table(:fis_situacao_fiscal)
-> 0.0014s
rake aborted!
An error has occurred, this and all later migrations canceled:
Don't know how to build task 'rake sistema:load_data file=faturamento/cfop'
哪里出了问题?
4条答案
按热度按时间hxzsmxv21#
是的!有一个方法可以做到。
运行以下命令。
更新解决方案
不要把Rake放在括号里,只要任务的 name 就可以了。我建议你在控制台运行下面的命令时设置一个
ENV
变量。您可以使用下面的示例单独调用它。
它将在您的任务中作为
ENV['file']
提供。mctunoxg2#
请注意,如果使用'system'调用Rake任务,则需要在之后检查进程状态,如果Rake任务失败,则引发异常。否则,即使Rake任务失败,迁移也会成功。
您可以像这样检查进程状态:
调用rake任务是一个更好的选择--如果Rake任务失败,它将导致迁移失败。
nkcskrwz3#
您可以使用
Rake::Task['namespace:task'].invoke
或Rake::Task['namespace:task'].execute
在加载的Rails环境中执行rake任务。您可以在
invoke
或execute
方法中将数据传递给任务。示例:可以在rake任务中处理此参数,如下所示:
这可以在控制台上执行为:
更多信息:https://medium.com/@sampatbadhe/rake-task-invoke-or-execute-419cd689c3bd
ivqmmu1c4#
This decision更适合,恕我直言。
在你的情况下,它会是这样的smth: