gpt4 book ai didi

ruby - 为什么循环中的 Rake 任务只执行一次?

转载 作者:数据小太阳 更新时间:2023-10-29 06:35:13 25 4
gpt4 key购买 nike

我有连接到多个数据库的 Rails 应用程序。我编写了如下所示的自定义 rake 任务:

task :migrate_accounts_schema => [:environment] do |t|
users = User.find :all, :conditions => ["state = 2"], :order => "id asc"
users.each do |user|
if user.state == 2
ActiveRecord::Base.establish_connection(
:adapter => "postgresql",
:host => user.database_host,
:port => user.database_port,
:username => user.subdomain,
:password => "#{user.database_password}",
:database => user.database_name
)
Rake::Task["db:migrate"].invoke
end
end
end

问题是任务只为 users[0] 用户(集合中的第一个用户)执行 db:migrate 并且没有错误,只是静静地停止...

这是 rake --trace 的输出

** Invoke app:migrate_accounts_schema (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute app:migrate_accounts_schema
** Invoke db:migrate (first_time)
** Invoke environment
** Execute db:migrate
** Invoke db:schema:dump (first_time)
** Invoke environment
** Execute db:schema:dump
** Invoke db:migrate

我不知道为什么其他用户没有迁移。

最佳答案

我在 Rake 源代码中找到了答案:

http://rake.rubyforge.org/classes/Rake/Task.html#M000115

它说你必须

重新启用任务,允许在任务再次调用时执行其任务。

例如我最近以这种方式在我的项目中使用了它:

# db/seed.rb
Rake::Task['catalog:destroy'].invoke

files = Dir.glob("private/catalog/*").sort
files.each do |file|
next unless File.extname(file) == '.xlsx'
puts file.split('/').last
Rake::Task['catalog:upload'].invoke(file)
Rake::Task['catalog:upload'].reenable
puts
end

所以我每次循环都运行 rake catalog:upload[some_file]。

希望这对您有所帮助。另见 https://stackoverflow.com/a/1290119/3082929

关于ruby - 为什么循环中的 Rake 任务只执行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4822020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com