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

时间:2013-12-31 13:07:32

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

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

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

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

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

5 个答案:

答案 0 :(得分:38)

最简单,最基本和默认的方法是使用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'

这种方法适用于非常简单的应用程序,但如果你想要更先进的东西,可以使用几种宝石。

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

  • 每个环境配置。您可以为应用程序配置默认配置,然后使用特定于环境的配置覆盖默认配置
  • 用于自定义覆盖的
  • local.rb文件
  • capistrano - 与配置样式相似
  • 它与dotenv gem非常有效,非常有用,可以避免在您的仓库中存储敏感凭据。

答案 1 :(得分:7)

这听起来像是存储在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

答案 2 :(得分:3)

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

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

并加载密码

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

它有效,我希望能帮到你

enter image description here

答案 3 :(得分:2)

您可以使用gem figaro

config / application.yml

中编写变量
HELLO: world
development:
  HELLO: developers
production:
  HELLO: users

然后你可以获取

ENV["HELLO"]

答案 4 :(得分:0)

在rails中有一个名为

的宝石
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