ruby on rails - openclassroom - Où puis-je stocker des variables à l'échelle du site dans Rails 4?



ruby on rails base de données (4)

Je suis nouveau sur Rails et je viens de chez ColdFusion, où nous stockions des variables globales / à l'échelle du site dans le champ d'application. Cela conserve la variable dans toutes les vues ou tous les contrôleurs. Est-ce que Rails 4 a une fonctionnalité équivalente pour ce type de chose?

La variable à l'échelle du site ne change généralement pas souvent, il n'est donc pas nécessaire de la protéger.

Par exemple, dans ma situation, je souhaite enregistrer le nom de domaine du site Web. Un pour les tests et un pour les environnements en direct. Localhost pour le développement et xxxxxx.com pour la production.

Tout conseil ou pointeur aiderait. J'ai beaucoup consulté Google et les solutions semblent beaucoup trop compliquées pour réaliser ce qui semble être une tâche si triviale. Quelle est la meilleure solution élégante pour Rails 4?


Answer #1

Cela semble être un exemple parfait pour les valeurs de configuration stockées dans config/environments/production.rb et config/environments/development.rb . Stockez simplement n'importe quelle valeur:

config.my_special_value = 'val'

Et accédez-y dans votre application comme ceci:

Rails.application.config.my_special_value

La valeur de votre environnement est toujours active.

Si vous souhaitez simplement avoir une valeur "globale", stockez-la dans votre contrôleur d'application. Tous vos contrôleurs de vue sont dérivés de votre contrôleur d'application, vous pouvez donc enregistrer n'importe quelle valeur sous la forme d'une variable d'instance ou de classe:

class ApplicationController < ActionController::Base
  MY_CONSTANT_VALUE = "foo"
end

class MyViewController < ApplicationController
  def index
    raise MY_CONSTANT_VALUE.inspect
  end
end

Vous pouvez également implémenter un assistant:

# app/helpers/application_helper.rb
module ApplicationHelper
  FOO = "bar"
end

# app/controllers/foo_controller.rb
class FooController < ApplicationController
  def index
    raise FOO
  end
end

Answer #2

Dans les rails il y a un bijou nommé

gem 'dotenv-rails'

En l'utilisant, nous pouvons affecter les variables au niveau du système et les utiliser dans l'application.

En utilisant des étapes simples Commencez par créer un fichier simple au niveau du système à n'importe quel endroit avec l'extension nommée .env

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

Et redémarrez votre application

Source dotenv


Answer #3

Vous pouvez utiliser gem figaro

Ecrivez vos variables dans config / application.yml

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

Ensuite, vous pouvez aller chercher

ENV["HELLO"]

Answer #4

La méthode la plus simple, la plus simple et la plus simple consiste à utiliser le magasin Rails.application.config .

Rails.application.config.my_config = 'foo'

Vous pouvez assigner une configuration dans votre environnement:

# application.rb
module MyApp
  class Application < Rails::Application
    config.my_config = 'foo'
  end
end

et le lire avec

Rails.application.config.my_config
# => 'foo'

Cette approche fonctionne bien pour des applications très simples, mais si vous voulez quelque chose de plus avancé, plusieurs gemmes sont disponibles.

J'utilise actuellement SimpleConfig . Les principaux avantages sont les suivants:

  • configuration par environnement. Vous pouvez configurer les configurations par défaut de l'application, puis remplacer les paramètres par défaut par des configurations spécifiques à l'environnement.
  • fichier local.rb pour les remplacements personnalisés
  • style de configuration similaire au capistrano
  • Cela fonctionne très bien avec la gem dotenv , très utile pour éviter de stocker des informations d'identification sensibles dans votre repo.




ruby-on-rails-4