我是Rails的新手,来自ColdFusion背景,我们将全局/站点范围的变量存储在“应用程序”范围内。这会将变量保留在任何视图或控制器中。 Rails 4是否具有与此类事物相同的功能?
网站范围的变量通常不会经常更改,因此不需要以任何方式进行保护。
例如,在我的情况下,我想存储网站的域名。一个用于测试,一个用于实时环境。用于开发的Localhost和用于生产的xxxxxx.com。
任何提示或指示都会有所帮助。我已经广泛搜索了这些,并且解决方案似乎太复杂了,无法实现看起来如此微不足道的任务。什么是Rails 4最优雅的解决方案?
答案 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.rb
和config/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
文件中
像这样
#Root dir create file ".env"
PASSWORD=123456
并加载密码
#Somewhere in app
ENV['PASSWORD'] #=> 123456
它有效,我希望能帮到你
答案 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')
然后重新启动您的应用