Ruby on rails 如何在rails应用程序中运行rails g model/rake db:migrate
我想在我的rails应用程序中运行“rails g模型”和/或“rake db:migrate”。 当我这样做的时候,“rails g模型”工作得很好,但需要很长时间, “rake db:migrate”引发了一个错误Ruby on rails 如何在rails应用程序中运行rails g model/rake db:migrate,ruby-on-rails,Ruby On Rails,我想在我的rails应用程序中运行“rails g模型”和/或“rake db:migrate”。 当我这样做的时候,“rails g模型”工作得很好,但需要很长时间, “rake db:migrate”引发了一个错误 SQLite3::BusyException: database is locked 只有在创建后使用和保存后使用时才会出现错误,但在创建前使用或在创建前后使用时效果良好 我的模型: class Table < AbstractModel after_crea
SQLite3::BusyException: database is locked
只有在创建后使用和保存后使用时才会出现错误,但在创建前使用或在创建前后使用时效果良好
我的模型:
class Table < AbstractModel
after_create :create_table
protected
def create_table
system("rails g model #{self.name}")
system("rake db:migrate")
end
end
类表
Rails生成器不能在Rails应用程序中运行。它们甚至不是真的必要。他们只是很好的拥有。因此,您可以运行rails g model Table
,而不是创建一个名为Table的文件,它将在模型中生成文件Table.rb,并使用您传递的任何属性生成迁移
迁移也不应该在应用程序代码中运行。您几乎必须手动或使用部署脚本来管理它们
另一方面,after_create
是对表的各个实例的回调。因此,当您调用Table.create({})
时,它将调用create\u Table
,这不是您想要的
编辑:
在提交后使用而不是在创建后使用似乎可以解决OP的问题。您想实现什么?。正如evanbikes所说,您的设置方式是,每次创建表的实例时,都将生成一个新模型。您可以使用cron作业按计划运行rake任务。如果您使用的是heroku,那么您可以使用Herome scheduler。希望有帮助。谢谢,@evanbikes和@LuisMenjivar。每当我做table时,我确实想创建一个表和一个新模型。创建({})
并且我想立即完成,所以我的问题是,为什么数据库在创建回调后被锁定在中?听起来你知道你在做什么<代码>创建后
将在创建记录后但在事务完成之前触发。因此,在提交:创建表之后,on::create
可能会解决锁定问题。