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?
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:
local.rb
pour les remplacements personnaliséscapistrano
- style de configurationdotenv
gem, très utile pour éviter de stocker des informations d'identification sensibles dans votre référentiel.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
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 .env
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
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"]
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