Подтвердить что ты не робот

Где я могу хранить общесистемные переменные в Rails 4?

Я новичок в Rails и пришел из фона ColdFusion, где мы будем хранить глобальные/общесистемные переменные в области "приложение". Это сохраняет переменную в любом представлении или контроллере. Имеет ли Rails 4 эквивалентную функциональность для этого типа?

Внутренняя переменная обычно не изменяется часто, поэтому она не нуждается в защите.

Например, в моей ситуации я хочу сохранить доменное имя веб-сайта. Один для тестирования и один для живой среды. Localhost для разработки и xxxxxx.com для производства.

Любые советы или указатели помогут. Я широко изучил эту проблему, и решения, похоже, слишком сложны для достижения того, что кажется такой тривиальной задачей. Какое лучшее элегантное решение для Rails 4?

4b9b3361

Ответ 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"]