gpt4 book ai didi

ruby-on-rails - Rails 应用程序的生命周期

转载 作者:数据小太阳 更新时间:2023-10-29 06:28:06 24 4
gpt4 key购买 nike

我正在尝试了解 Rails 应用程序的生命周期。 application_controller.rb 什么时候运行?是每次更改时只执行一次,还是每次请求时都执行一次?

我想了解以下文件:

  • config/environments/*.rb(开发、生产或测试,取决于当前模式)
  • boot.rb
  • 环境.rb
  • 路线.rb

我问这个的原因之一是,我想知道放在哪里比较好

  • 初始化代码
  • 自定义配置数据

编辑:

@Gdeglin 的回答很好,但我实际上很想知道这些文件中的每一个何时运行。

最佳答案

应用程序 Controller .rb

ApplicationController 是所有 Controller 的父类。因此,其中声明的方法将对所有 Controller 可用。

ApplicationController 是您想要应用到应用程序中所有 Controller 的过滤器或您希望对所有 Controller 可用的方法的方便位置。

配置/环境/*.rb

config/environments/*.rb 中的文件根据您的服务器运行的环境(开发/生产)覆盖默认 config/enviornment.rb 文件中的设置。一个例子是,在开发中错误被打印到屏幕上,而在生产中返回一个通用错误页面。这个设置在 config/environments/development.rb

启动.rb

boot.rb 用作 rails 初始化过程的一部分。您通常不需要,也可能不应该触摸它。

环境.rb

environment.rb 是您的应用程序的通用配置文件。

路线.rb

routes.rb 用于定义您的应用程序如何处理对特定 url 的请求。例如,您可能希望所有 404 请求都转到特定操作,而不是由默认错误处理程序处理:

map.connect '*path', :controller => 'home', :action => 'on_404'

它也是实现RESTful的重要组成部分。申请。

在哪里放置初始化和配置代码

初始化代码和自定义配置数据都应放在 enviornment.rb 中(阅读此文件中的注释)。如果您希望某些代码仅在开发或生产中的初始化期间运行,请将其分别放在 config/environments/development.rb 或 config/environments/production.rb 中。

编辑:

此处提供了关于这些文件中的每一个在初始化期间何时运行的很好的概述:

http://toolmantim.com/articles/environments_and_the_rails_initialisation_process https://github.com/toolmantim/toolmantim/blob/master/articles/environments_and_the_rails_initialisation_process.haml

主要步骤是:

  1. Rails Initializer 已加载 ( http://api.rubyonrails.org/classes/Rails/Initializer.html )

  2. rails Initializer 设置日志记录,然后加载 environment.rb

  3. environment.rb 加载 boot.rb

  4. boot.rb 设置 RAILS_ROOT 常量并将 Rails 库和应用程序代码添加到 LOAD_PATH

  5. environment.rb 执行 Rails::Initializer.run

  6. rails 框架已加载(ActiveRecord、ActionMailer 等)

  7. 已加载您环境的特定配置文件 (config/environments/development.rb.)

  8. after_initializeto_prepare 回调会在您创建任何内容时执行

  9. Rails 已完成加载并准备好处理请求

关于ruby-on-rails - Rails 应用程序的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/696461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com