如何在我的rails应用程序中运行rails g model / rake db:migrate

时间:2014-12-10 22:02:48

标签: ruby-on-rails

我想运行" rails g model"和/或" rake db:migrate"在我的rails应用程序中。 当我这样做时," rails g model"工作正常,但需要很长时间, 和" 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

2 个答案:

答案 0 :(得分:1)

Rails生成器不适合在Rails应用程序中运行。它们甚至都不是必需的。他们只是很有趣。因此,您可以运行rails g model table <attrs>而不是创建名为Table的文件,它将在模型中生成文件table.rb,并使用您传递的任何attrs生成迁移。

迁移也不应该在应用程序代码中运行。您几乎必须手动或使用部署脚本来管理它们。

另外,after_createTable个别实例的回调。因此,当您致电Table.create({<attrs>})时,它会拨打create_table,这不是您想要的。

编辑:

使用after_commit而非after_create似乎解决了OP的问题。

答案 1 :(得分:1)

你想要完成什么?正如evanbikes所说,您设置的方式是每次创建表的实例时,您将生成一个新模型。您可以使用cron作业按计划运行rake任务。如果您使用的是heroku,则可以使用英雄调度程序。希望它有所帮助。