Где я могу хранить общесистемные переменные в Rails 4?
Я новичок в Rails и пришел из фона ColdFusion, где мы будем хранить глобальные/общесистемные переменные в области "приложение". Это сохраняет переменную в любом представлении или контроллере. Имеет ли Rails 4 эквивалентную функциональность для этого типа?
Внутренняя переменная обычно не изменяется часто, поэтому она не нуждается в защите.
Например, в моей ситуации я хочу сохранить доменное имя веб-сайта. Один для тестирования и один для живой среды. Localhost для разработки и xxxxxx.com для производства.
Любые советы или указатели помогут. Я широко изучил эту проблему, и решения, похоже, слишком сложны для достижения того, что кажется такой тривиальной задачей. Какое лучшее элегантное решение для Rails 4?
Ответы
Ответ 1
Самый простой, простой и стандартный способ - использовать хранилище 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, очень полезно избегать хранения конфиденциальных учетных данных в вашем репо.
Ответ 2
Это звучит как прекрасный пример для значений конфигурации, хранящихся в 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
Вы также можете реализовать помощника:
# app/helpers/application_helper.rb
module ApplicationHelper
FOO = "bar"
end
# app/controllers/foo_controller.rb
class FooController < ApplicationController
def index
raise FOO
end
end
Ответ 3
Я могу рекомендовать хороший метод для хранения переменной. Я использую это для производства
Пароли легче хранить в файле .env
![http://i.stack.imgur.com/jbcAO.png]()
как это
#Root dir create file ".env"
PASSWORD=123456
и пароль для загрузки
#Somewhere in app
ENV['PASSWORD'] #=> 123456
он работает, я надеюсь, поможет вам
![enter image description here]()
Ответ 4
Вы можете использовать gem figaro
напишите переменные в config/application.yml
HELLO: world
development:
HELLO: developers
production:
HELLO: users
Затем вы можете выбрать
ENV["HELLO"]