Ruby on rails 在Rails 4中,我在哪里可以存储站点范围的变量?
我是Rails新手,来自ColdFusion背景,我们将在“应用程序”范围内存储全局/站点范围的变量。这将在任何视图或控制器中保持变量。Rails 4对于这种类型的东西有同等的功能吗 站点范围的变量通常不会经常更改,因此不需要以任何方式进行保护 例如,在我的情况下,我想存储网站的域名。一个用于测试,一个用于实时环境。Localhost用于开发,xxxxxx.com用于生产Ruby on rails 在Rails 4中,我在哪里可以存储站点范围的变量?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我是Rails新手,来自ColdFusion背景,我们将在“应用程序”范围内存储全局/站点范围的变量。这将在任何视图或控制器中保持变量。Rails 4对于这种类型的东西有同等的功能吗 站点范围的变量通常不会经常更改,因此不需要以任何方式进行保护 例如,在我的情况下,我想存储网站的域名。一个用于测试,一个用于实时环境。Localhost用于开发,xxxxxx.com用于生产 任何提示或指示都会有所帮助。我在谷歌上搜索了很多,解决方案似乎太复杂了,无法完成看似如此琐碎的任务。Rails 4的最佳优雅
任何提示或指示都会有所帮助。我在谷歌上搜索了很多,解决方案似乎太复杂了,无法完成看似如此琐碎的任务。Rails 4的最佳优雅解决方案是什么?这听起来像是存储在
config/environments/production.rb
和config/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
class ApplicationController
您还可以实现一个助手:
# app/helpers/application_helper.rb
module ApplicationHelper
FOO = "bar"
end
# app/controllers/foo_controller.rb
class FooController < ApplicationController
def index
raise FOO
end
end
#app/helpers/application_helper.rb
模块ApplicationHelper
FOO=“bar”
结束
#app/controllers/foo_controller.rb
类FooController<应用程序控制器
def索引
养富
结束
结束
您可以使用
在config/application.yml中写入变量
HELLO: world
development:
HELLO: developers
production:
HELLO: users
然后你可以去拿
ENV["HELLO"]
我可以推荐一种存储变量的好方法。我在生产中使用这种方法
密码可以更容易地存储到
.env
文件中
像这样
#Root dir create file ".env"
PASSWORD=123456
并加载密码
#Somewhere in app
ENV['PASSWORD'] #=> 123456
我希望它能帮助你
最简单、基本和默认的方法是使用
Rails.application.config
存储
Rails.application.config.my_config = 'foo'
您可以在环境中分配配置:
# application.rb
module MyApp
class Application < Rails::Application
config.my_config = 'foo'
end
end
这种方法适用于非常简单的应用程序,但如果您想要更高级的应用程序,可以使用几种gem
我目前正在使用。主要优点是:
- 每个环境配置。您可以为应用程序配置默认配置,然后使用特定于环境的配置覆盖默认配置
自定义覆盖文件local.rb
-类似配置样式capistrano
- 它与gem配合得很好,非常有助于避免在repo中存储敏感凭证
- 在rails中有一个名为
gem 'dotenv-rails'
通过使用它,我们可以将变量分配到系统级别并在应用程序中使用
通过使用简单的步骤
首先在系统级的任何地方创建一个名为extension.env的简单文件
//in application.rb
require 'dotenv'
Dotenv.load('path-of-your-file.env')
然后重新启动应用程序
来源
谢谢,你的第一个建议对我很有用。不过,你可能想在回答中指出,为了提取变量,你需要重新启动Rails。全局常量是全局的,可以在任何地方访问。在你的例子中,你可以只使用初始值设定项,而不需要依赖类或模块。
//in application.rb
require 'dotenv'
Dotenv.load('path-of-your-file.env')