Ruby on rails Rails应用程序&x27;生命周期

Ruby on rails Rails应用程序&x27;生命周期,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图了解rails应用程序的生命周期。应用程序_controller.rb何时运行?是每次更改一次,还是每次请求一次 我想知道关于以下文件的相同信息: config/environments/*.rb(开发、生产或测试,取决于当前模式) boot.rb 环境.rb routes.rb 我问这个问题的原因之一是,我想知道哪里是一个好地方 初始化代码 自定义配置数据 编辑: @Gdeglin的答案很好,但我实际上很想知道这些文件何时运行。application\u controller.r

我试图了解rails应用程序的生命周期。应用程序_controller.rb何时运行?是每次更改一次,还是每次请求一次

我想知道关于以下文件的相同信息:

  • config/environments/*.rb(开发、生产或测试,取决于当前模式)
  • boot.rb
  • 环境.rb
  • routes.rb
我问这个问题的原因之一是,我想知道哪里是一个好地方

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

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

application\u controller.rb ApplicationController是所有控制器的父类。因此,在其中声明的方法将对所有控制器可用

ApplicationController是一个方便的地方,可用于筛选要应用于应用程序中所有控制器的过滤器,或筛选希望对所有控制器可用的方法

config/environments/*.rb config/environments/*.rb中的文件覆盖默认config/environment.rb文件中的设置,具体取决于服务器运行的环境(开发/生产)。一个例子是,在开发过程中,错误被打印到屏幕上,而在生产过程中,一般错误页面被返回。此设置位于config/environments/development.rb中

boot.rb boot.rb用作rails初始化过程的一部分。你通常不需要,也不应该碰它

环境.rb environment.rb是应用程序的通用配置文件

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

map.connect '*path', :controller => 'home', :action => 'on_404'
它也是实现应用程序的一个重要部分

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

编辑:

有关在初始化过程中何时运行这些文件的详细概述,请参见:

基本上,这些步骤是:

  • Rails初始值设定项已加载()

  • rails初始值设定项设置日志记录,然后加载environment.rb

  • environment.rb加载boot.rb

  • boot.rb设置
    RAILS\u ROOT
    常量,并将RAILS库和应用程序代码添加到
    LOAD\u路径

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

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

  • 将加载环境的特定配置文件(config/environments/development.rb)

  • 初始化后
    准备后
    如果创建了任何

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


  • 通常的做法是将初始化内容放在config/initializers/目录中。这样,您就可以保持environment.rb文件干净(er)


    瑞安·戴格尔(Ryan Daigle)所著。

    只要稍加努力,你就可以自己完成,这可能会更有用

    从“ruby脚本/服务器”开始。在我的(2.1)应用程序中,在“script”目录中查找名为“server”的文件。其中包括:

    #!/usr/bin/env ruby
    require File.dirname(__FILE__) + '/../config/boot'
    require 'commands/server'
    
    所以它需要boot.rb,它定义了很多东西,然后调用
    Rails.boot
    或多或少运行您定义的任何预初始化,然后需要
    环境
    ,它执行另一个级别的引导。到那个时候,事情开始变得复杂起来:我推荐一张大纸

    等等

    或者,您可以在中需要文件时通过黑客
    Kernel#require
    登录-我自己还没有尝试过(该方法可能会在其他地方被重写),但它可以工作


    应用程序\u控制器根本不是“运行”的-它是其他控制器的父类,因此当加载继承控制器时,其内容(如果需要且未被重写)将变为可用。您通常会使用它来提供所有控制器的通用功能。

    下面是我通过在代码中放入一组print语句观察到的情况:

    应用程序控制器和posts控制器(例如)在每个请求上都“运行”。方法def/end之外的每一行代码都在两个控制器中执行,然后代码流传递到请求的/路由的方法

    因为这不是我所期望的,所以我认为发布它是值得的。如果我错了,请随意编辑


    对于Heroku,出于某种原因,只有当print语句位于方法内部时,print语句输出才会显示在标准输出日志中。但我相信上述描述仍然适用。

    Neat。我不知道。谢谢更具体地说,这些文件何时运行?这是我感兴趣学习的应用程序生命周期。这也有助于这是一个非常有用的主题和很好的答案。然而,找到更多细节的链接已经不存在了。另外,如果Rails3中有任何变化,我希望有人能给出新的答案。谢谢我正在搜索Rails应用程序中最长寿的对象,它能够承载我的持久套接字连接器(一个客户端套接字,它将与其他web服务建立持久保持活动的连接)。这样一个目标的最佳候选对象是什么<代码>类应用程序位于
    Application.rb
    ?@alfredd的链接不再工作。导致页面继续