ruby-on-rails - tutorial - ruby中文




我在哪裡可以在Rails 4中存儲站點範圍的變量? (4)

你可以使用寶石figaro

config / application.yml中編寫變量

HELLO: world
development:
  HELLO: developers
production:
  HELLO: users

然後你可以獲取

ENV["HELLO"]

我是Rails的新手,來自ColdFusion背景,我們將全局/站點範圍的變量存儲在“應用程序”範圍內。 這會將變量保留在任何視圖或控制器中。 Rails 4是否具有此類事物的等效功能?

站點範圍的變量通常不會經常更改,因此不需要以任何方式進行保護。

例如,在我的情況下,我想存儲網站的域名。 一個用於測試,一個用於實時環境。 用於開發的Localhost和用於生產的xxxxxx.com。

任何提示或指示都會有所幫助。 我已經廣泛搜索了這些,並且解決方案似乎太複雜了,無法實現看起來如此微不足道的任務。 什麼是Rails 4最優雅的解決方案?


在鐵軌中有寶石命名為

gem 'dotenv-rails'

通過使用它,我們可以將變量分配給系統級並在應用程序中使用。

通過使用簡單的步驟首先在具有命名擴展名.env的任何位置在系統級別創建一個簡單的字段

//in application.rb        
require 'dotenv'
Dotenv.load('path-of-your-file.env')

然後重新啟動您的應用

來源dotenv


這聽起來像是存儲在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

最簡單,最基本和默認的方法是使用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很好地配合使用,非常有用,可以避免在您的dotenv存儲敏感憑證。




ruby-on-rails-4