繁体   English   中英

如何在Rails应用程序中运行Rails G模型/ Rake db:migrate

[英]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_createafter_save ,但是当我使用正常工作before_createaround_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_createafter_createTable各个实例的回调。 因此,当您调用Table.create({<attrs>}) ,它将调用create_table ,这不是您想要的。

编辑:

不使用after_commit after_create似乎可以解决OP的问题。

你想达到什么目的?。 就像evanbikes所说的那样,您建立的方式是每次创建表实例时,都将生成一个新模型。 您可以使用cron作业按计划运行rake任务。 如果您正在使用heroku,则可以使用英雄式调度程序。 希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM