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

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 配合使用,非常有用,可以避免在您的仓库中存储敏感凭证.


ckr*_*use 9

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