我正在构建一个系统,允许用户通过管理前端界面修改database.yml内容。
在应用程序重新启动之前,对database.yml 的更改显然不会产生任何影响。我希望有一种方法可以强制 ActiveRecord 在启动后重新加载配置,而不是强制用户(可能无法通过 SSH 访问物理机)手动重新启动应用程序。
有没有办法强制 ActiveRecord 在初始启动后重新初始化,而不是要求他们重新启动服务器?
基本原理
这有两个用例 - a) 初始设置向导 b) 从 sqlite 评估数据库迁移到生产支持数据库。
初始设置向导
安装我们的应用程序并首次启动后,将向用户显示一个设置向导,其中允许用户在使用 sqlite 的内置评估数据库或指定生产支持的数据库之间进行选择。他们需要指定数据库属性。我们希望提供一个前端在初始设置期间执行此操作,而不是要求用户在服务器上编辑 yml
文件。
从 sqlite 评估数据库迁移到生产支持数据库
如果用户选择使用内置评估数据库,但更改想要迁移到生产数据库,他们需要更新数据库设置以反射(reflect)此更改。与上面相同的原因,需要一个前端而不是要求用户编辑配置文件,特别是因为我们可以从应用程序验证连接、权限等,而不是用户在尝试启动应用程序时发现它不起作用他们得到一个 activerecord 异常。
最佳答案
在下一个请求时重新启动 Rails 堆栈,就像您有权访问服务器一样。
system("touch #{File.join(Rails.root,'tmp','restart.txt')")
关于ruby-on-rails - Rails 启动后重新初始化 ActiveRecord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14409493/