[英]How do I run rails g model / rake db:migrate within my rails application
我想在我的rails应用程序中运行“ rails g模型”和/或“ rake db:migrate”。 当我这样做时,“ rails g模型”可以正常工作,但是要花很长时间,并且“ rake db:migrate”引发了一个错误
SQLite3::BusyException: database is locked
只有当我使用出现的错误after_create
和after_save
,但是当我使用正常工作before_create
或around_create
。
我的模特:
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 <attrs>
而不是创建一个名为Table的文件,它将在模型中生成文件table.rb并使用传递给它的任何属性生成您的迁移。
迁移也不应在应用程序代码中运行。 您几乎必须手动或使用部署脚本来管理它们。
after_create
, after_create
是Table
各个实例的回调。 因此,当您调用Table.create({<attrs>})
,它将调用create_table
,这不是您想要的。
编辑:
不使用after_commit
after_create
似乎可以解决OP的问题。
你想达到什么目的?。 就像evanbikes所说的那样,您建立的方式是每次创建表实例时,都将生成一个新模型。 您可以使用cron作业按计划运行rake任务。 如果您正在使用heroku,则可以使用英雄式调度程序。 希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.