web-dev-qa-db-fra.com

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

Je suis nouveau dans Rails et je viens d'un environnement ColdFusion, dans lequel nous stockons des variables globales/globales pour le site dans la portée de l'application. Cela persiste la variable dans n'importe quelle vue ou contrôleur. Rails 4 a-t-il une fonctionnalité équivalente pour ce genre de chose?

La variable à l'échelle du site ne change généralement pas souvent et n'a donc besoin d'aucune protection.

Par exemple, dans mon cas, je souhaite stocker 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.

Des conseils ou des indications aideraient. J'ai beaucoup cherché dans Google et les solutions semblent beaucoup trop compliquées pour mener à bien ce qui semble être une tâche aussi triviale. Quelle est la meilleure solution élégante pour Rails 4?

23

Le moyen le plus simple, de base et par défaut, 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:

  • configuration par environnement. Vous pouvez configurer les configurations par défaut pour l'application, puis les remplacer par des configurations spécifiques à l'environnement.
  • Fichier local.rb pour les remplacements personnalisés
  • capistrano- style de configuration
  • cela fonctionne bien avec le dotenv gem, très utile pour éviter de stocker des informations d'identification sensibles dans votre référentiel.
37
Simone Carletti

Cela ressemble à un exemple parfait pour les valeurs de configuration stockées dans config/environments/production.rb et config/environments/development.rb. Il suffit de stocker n'importe quelle valeur ici:

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 y enregistrer n'importe quelle valeur sous forme de 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
7
ckruse

Je peux recommander une bonne méthode pour stocker la variable. Je l'utilise en production
Les mots de passe peuvent être stockés plus facilement dans le fichier .envhttp://i.stack.imgur.com/jbcAO.png
comme ça

#Root dir create file ".env"
PASSWORD=123456

et charger le mot de passe

#Somewhere in app
ENV['PASSWORD'] #=> 123456

ça marche j'espère vous aider

enter image description here

3
Зелёный

Vous pouvez utiliser bijou figaro

écrivez vos variables dans config/application.yml

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

Ensuite, vous pouvez aller chercher

ENV["HELLO"]
2
Raj Adroit

Dans Rails, il y a une gemme nommée 

gem 'dotenv-Rails'

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

En utilisant des étapes simples Créez d’abord un fichier simple au niveau système à n’importe quel endroit portant l’extension nommée .env

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

Et redémarrez votre application

Source S'il vous plaît eu le lien pour la description de dot env gem

0