`
fantaxy025025
  • 浏览: 1246859 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Rails源码阅读(12)叫Rails的模块module_Rails常量使用

 
阅读更多

 

The module nams "Rails"

 

基本都是一些类方法,本来也是作为服务类的。源码如下:

 

  class << self
    def application
      @@application ||= nil
    end

    def application=(application)
      @@application = application
    end

    # The Configuration instance used to configure the Rails environment
    def configuration
      application.config
    end

    def initialize!
      application.initialize!
    end

    def initialized?
      @@initialized || false
    end

    def initialized=(initialized)
      @@initialized ||= initialized
    end

    def logger
      @@logger ||= nil
    end

    def logger=(logger)
      @@logger = logger
    end

    def backtrace_cleaner
      @@backtrace_cleaner ||= begin
        # Relies on Active Support, so we have to lazy load to postpone definition until AS has been loaded
        require 'rails/backtrace_cleaner'
        Rails::BacktraceCleaner.new
      end
    end

    def root
      application && application.config.root
    end

    def env
      @_env ||= ActiveSupport::StringInquirer.new(ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development")
    end

    def env=(environment)
      @_env = ActiveSupport::StringInquirer.new(environment)
    end

    def cache
      RAILS_CACHE
    end

    # Returns all rails groups for loading based on:
    #
    # * The Rails environment;
    # * The environment variable RAILS_GROUPS;
    # * The optional envs given as argument and the hash with group dependencies;
    #
    # == Examples
    #
    #   groups :assets => [:development, :test]
    #
    #   # Returns
    #   # => [:default, :development, :assets] for Rails.env == "development"
    #   # => [:default, :production]           for Rails.env == "production"
    #
    def groups(*groups)
      hash = groups.extract_options!
      env = Rails.env
      groups.unshift(:default, env)
      groups.concat ENV["RAILS_GROUPS"].to_s.split(",")
      groups.concat hash.map { |k,v| k if v.map(&:to_s).include?(env) }
      groups.compact!
      groups.uniq!
      groups
    end

    def version
      VERSION::STRING
    end

    def public_path
      application && application.paths["public"].first
    end
  end
 这里面的很多方法是服务的,比如查看配置,查看版本,等等。

 

重点说几个常用的:

* application

 1.9.3p194 :001 > Rails.application.class

 => AppName::Application

 

* 查看Rails的配置

 

    # The Configuration instance used to configure the Rails environment
    def configuration
      application.config
    end

 

1.9.3p194 :006 > Rails.configuration.class

 => Rails::Application::Configuration 

 

1.9.3p194 :008 > Rails.configuration.session_store

 => ActionDispatch::Session::CookieStore

还有很多配置,随时补充吧,在这里查看配置很方便。

 

*cache 查看cache类型和配置

1.9.3p194 :010 >   Rails.cache

 => #<ActiveSupport::Cache::FileStore:0x000000032fa898 @options={}, @cache_path="/mnt/ubuntu-64-disk-2/home

    def cache
      RAILS_CACHE
    end

 这里的cache居然还是个常量。

 

Rails::Info

  autoload :Info, 'rails/info'

 这个类显示了很多Rails的基本信息,很多Rails模块的很多用法,可以参考这个类是怎么使用的。

1.9.3p194 :001 > Rails::Info

   (3.1ms)  SELECT `schema_migrations`.`version` FROM `schema_migrations` 

 => About your application's environment

Ruby version              1.9.3 (x86_64-linux)

RubyGems version          1.8.24

Rack version              1.4

Rails version             3.2.13

JavaScript Runtime        therubyracer (V8)

Active Record version     3.2.13

Action Pack version       3.2.13

Active Resource version   3.2.13

Action Mailer version     3.2.13

Active Support version    3.2.13

Database schema version   20140613094339 

 

  autoload :InfoController, 'rails/info_controller'

rails模块中引入的这个类,代码很简单:

class Rails::InfoController < ActionController::Base
  def properties
    if consider_all_requests_local? || request.local?
      render :inline => Rails::Info.to_html
    else
      render :text => '<p>For security purposes, this information is only available to local requests.</p>', :status => :forbidden
    end
  end

  protected

  def consider_all_requests_local?
    Rails.application.config.consider_all_requests_local
  end
end

 就是把Rails的Info信息在浏览器显示一下。 

可以看出这里是用了ActionController,那么我们认为,配置了路由,就可以访问了,不知rails自带的默认生成的代码是不是配置了此项。

我们来配置一下路由:

  get 'rails/info/properties' => 'rails::info#properties' #testing rails info

 好了在浏览器访问一下:

http://nihao.com:3000/rails/info/properties

果然是可以看到一个比较友好的表格,显示rails的详细信息。

 

+

+

+

0

-

-

-

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics