ruby-on-rails - Rails 启动后重新初始化 ActiveRecord

标签 ruby-on-rails ruby ruby-on-rails-3 rails-activerecord

我正在构建一个系统,允许用户通过管理前端界面修改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/

相关文章:

mysql - Rails 5 : How to order models by associated model attribute, 并使它们不同

ruby-on-rails - 如何防止 Git 在接收后 Hook 输出的每一行上打印 'remote:'?

ruby-on-rails - Action Controller : Exception | undefined method `fetch_value' for nil:NilClass

ruby-on-rails - 如何将 Rails 从 3.2.7 更新到 4.0?

ruby-on-rails - 按独特的子协会分组

ruby-on-rails - Rails 服务器控制台输出非常嘈杂,可以关闭吗?

ruby-on-rails-3 - 在 Heroku 上更改为 MySQL2 时出错

ruby-on-rails - 如何将当前的 Basecamp API 与 ActiveResource 结合使用?

ruby-on-rails - Heroku:PG::错误:错误:关系的权限被拒绝

ruby - padrino 应用程序包更新 : could not find compatible versions for "tilt"