【问题标题】:Where can I store site-wide variables in Rails 4?我在哪里可以在 Rails 4 中存储站点范围的变量?
【发布时间】:2013-12-31 13:07:31
【问题描述】:

我是 Rails 新手,来自 ColdFusion 背景,我们会将全局/站点范围的变量存储在“应用程序”范围内。这会将变量保留在任何视图或控制器中。 Rails 4 对这类东西有等效的功能吗?

站点范围的变量通常不会经常更改,因此不需要以任何方式进行保护。

例如,在我的情况下,我想存储网站的域名。一种用于测试,一种用于实时环境。本地主机用于开发,xxxxxx.com 用于生产。

任何提示或指示都会有所帮助。我已经广泛搜索了这个,解决方案似乎太复杂了,无法完成看似如此微不足道的任务。 Rails 4 最好的优雅解决方案是什么?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    最简单、基本和默认的方法是使用Rails.application.config 存储。

    Rails.application.config.my_config = 'foo'
    

    您可以在您的环境中分配配置:

    # application.rb
    module MyApp
      class Application < Rails::Application
        config.my_config = 'foo'
      end
    end
    

    并阅读它

    Rails.application.config.my_config
    # => 'foo'
    

    这种方法适用于非常简单的应用程序,但如果您想要更高级的东西,可以使用几个 gem。

    我目前正在使用SimpleConfig。主要优点是:

    • 按环境配置。您可以为应用配置默认配置,然后使用特定于环境的配置覆盖默认配置
    • local.rb 用于自定义覆盖的文件
    • capistrano-like 配置风格
    • 它可以很好地与 dotenv gem 配合使用,对于避免在您的存储库中存储敏感凭据非常有用。

    【讨论】:

    • 谢谢,您的第一个建议对我有用。不过,您可能需要注意您的答案,为了获取变量,您需要重新启动 Rails。
    【解决方案2】:

    这听起来像是存储在config/environments/production.rbconfig/environments/development.rb 中的配置值的完美示例。只需在其中存储任何值:

    config.my_special_value = 'val'
    

    并像这样在您的应用程序中访问它:

    Rails.application.config.my_special_value
    

    环境的价值始终是活跃的。

    如果您只想拥有一个“全局”值,请将其存储在您的应用程序控制器中。您的所有视图控制器都派生自您的应用控制器,因此您可以将任何值保存为实例或类变量:

    class ApplicationController < ActionController::Base
      MY_CONSTANT_VALUE = "foo"
    end
    
    class MyViewController < ApplicationController
      def index
        raise MY_CONSTANT_VALUE.inspect
      end
    end
    

    你也可以实现一个助手:

    # app/helpers/application_helper.rb
    module ApplicationHelper
      FOO = "bar"
    end
    
    # app/controllers/foo_controller.rb
    class FooController < ApplicationController
      def index
        raise FOO
      end
    end
    

    【讨论】:

    • 全局常量是全局的,可以在任何地方访问。在您的示例中,您可以只使用初始化程序,而无需依赖类或模块。
    【解决方案3】:

    我可以推荐存储变量的好方法。我在生产中使用它
    密码可以更方便地存储到.env 文件中
    像这样

    #Root dir create file ".env"
    PASSWORD=123456
    

    并加载密码

    #Somewhere in app
    ENV['PASSWORD'] #=> 123456
    

    效果不错,希望对你有帮助

    【讨论】:

      【解决方案4】:

      您可以使用gem figaro

      将变量写入 config/application.yml

      HELLO: world
      development:
        HELLO: developers
      production:
        HELLO: users
      

      然后就可以获取了

      ENV["HELLO"]
      

      【讨论】:

        【解决方案5】:

        在rails中有一个名为

        的gem
        gem 'dotenv-rails'
        

        通过使用它,我们可以将变量分配到系统级别并在应用程序中使用。

        通过简单的步骤 首先在系统级别的任何地方创建一个简单的文件,扩展名为 .env

        //in application.rb        
        require 'dotenv'
        Dotenv.load('path-of-your-file.env')
        

        然后重新启动您的应用程序

        来源 Please got the link for the desscription of dot env gem

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-05-08
          • 1970-01-01
          • 2015-11-06
          • 2011-01-23
          • 2010-09-18
          • 2017-03-26
          • 2010-10-02
          相关资源
          最近更新 更多