我在哪里可以在Rails 4中存储站点范围的变量?

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

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

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

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

最简单,最基本和默认的方法是使用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的配置风格
  • 它与dotenv gem很好地配合使用,非常有用,可以避免在您的dotenv存储敏感凭证。

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

 config.my_special_value = 'val' 

并在您的应用程序中访问它,如下所示:

 Rails.application.config.my_special_value 

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

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

 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 

我可以推荐好方法来存储变量。 我在生产中使用它
密码可以更容易地存储到.env文件中 http://i.stack.imgur.com/jbcAO.png
像这样

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

并加载密码

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

它的工作原理我希望能帮到你

在此处输入图像描述

你可以使用gemfigaro

config / application.yml中编写变量

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

然后你可以获取

 ENV["HELLO"] 

在铁轨中有gem命名为

 gem 'dotenv-rails' 

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

通过使用简单的步骤首先在具有命名扩展名.env的任何位置在系统级别创建一个简单的字段

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

然后重新启动您的应用

来源请获取dot env gem的desscription链接