Mic*_*umo 25 ruby ruby-on-rails ruby-on-rails-4
我是Rails的新手,来自ColdFusion背景,我们将全局/站点范围的变量存储在"应用程序"范围内.这会将变量保留在任何视图或控制器中.Rails 4是否具有此类事物的等效功能?
站点范围的变量通常不会经常更改,因此不需要以任何方式进行保护.
例如,在我的情况下,我想存储网站的域名.一个用于测试,一个用于实时环境.用于开发的Localhost和用于生产的xxxxxx.com.
任何提示或指示都会有所帮助.我已经广泛搜索了这些,并且解决方案似乎太复杂了,无法实现看起来如此微不足道的任务.什么是Rails 4最优雅的解决方案?
Sim*_*tti 40
最简单,最基本和默认的方法是使用Rails.application.config商店.
Rails.application.config.my_config = 'foo'
Run Code Online (Sandbox Code Playgroud)
您可以在您的环境中分配配置:
# application.rb
module MyApp
class Application < Rails::Application
config.my_config = 'foo'
end
end
Run Code Online (Sandbox Code Playgroud)
并阅读它
Rails.application.config.my_config
# => 'foo'
Run Code Online (Sandbox Code Playgroud)
这种方法适用于非常简单的应用程序,但如果您想要更高级的东西,可以使用几种宝石.
我正在使用SimpleConfig.主要优点是:
local.rb 用于自定义覆盖的文件capistrano类似配置风格dotenvgem 配合使用,非常有用,可以避免在您的仓库中存储敏感凭证.这听起来像存储在config/environments/production.rb和中的配置值的完美示例config/environments/development.rb.只需存储任何值:
config.my_special_value = 'val'
Run Code Online (Sandbox Code Playgroud)
并在您的应用程序中访问它,如下所示:
Rails.application.config.my_special_value
Run Code Online (Sandbox Code Playgroud)
始终您的环境的价值是活跃的.
如果您只想拥有"全局"值,请将其存储在应用程序控制器中.所有视图控制器都是从您的app控制器派生的,因此您可以将任何值保存为实例或类变量:
class ApplicationController < ActionController::Base
MY_CONSTANT_VALUE = "foo"
end
class MyViewController < ApplicationController
def index
raise MY_CONSTANT_VALUE.inspect
end
end
Run Code Online (Sandbox Code Playgroud)
您还可以实现一个帮助器:
# app/helpers/application_helper.rb
module ApplicationHelper
FOO = "bar"
end
# app/controllers/foo_controller.rb
class FooController < ApplicationController
def index
raise FOO
end
end
Run Code Online (Sandbox Code Playgroud)