Je me demandais comment ajouter des variables de configuration personnalisées à une application rails et comment y accéder dans le contrôleur, par exemple, je veux pouvoir définir un répertoire de téléchargement dans les fichiers de configuration, dites development.rb et pouvoir y accéder dans l'un de mes contrôleurs.
Deuxièmement, je prévoyais d'avoir le support S3 pour les téléchargements dans mon application, si je voulais ajouter un fichier yaml avec l'accès s3, la clé secrète, comment l'initialiser dans mon application Rails et comment accéder aux valeurs que j'ai définies dans ce fichier de configuration.
Réponses:
Mise à jour 1
Très recommandé: je vais avec la gemme Rails Config de nos jours pour le contrôle à grain fin qu'elle fournit.
Update2
Si vous voulez une solution rapide, vérifiez la réponse de Jack Pratt ci-dessous.
Bien que ma réponse d'origine ci-dessous fonctionne toujours, cette réponse est désormais obsolète. Je recommande de consulter les mises à jour 1 et 2.
Réponse originale:
Pour une solution rapide, regarder l' écran "Fichier de configuration YAML" casté par Ryan Bates devrait être très utile.
En résumé:
la source
RAILS_ENV
parRails.env
etRAILS_ROOT
parRails.root
.Dans Rails 3, les données de configuration personnalisées spécifiques à l'application peuvent être placées dans l'objet de configuration d'application. La configuration peut être affectée dans les fichiers d'initialisation ou les fichiers d'environnement - disons pour une application donnée
MyApp
:ou
Pour lire le paramètre, il suffit d'appeler la variable de configuration sans la définir:
MISE À JOUR Rails 4
Dans Rails 4, il existe une nouvelle façon pour cela => http://guides.rubyonrails.org/configuring.html#custom-configuration
la source
config/environments/production.rb
Config:config.whatever = false
Accédez-y n'importe où:Rails.configuration.whatever
undefined method
.Dans Rails 3.0.5, l'approche suivante a fonctionné pour moi:
Dans
config/environments/development.rb
, écrivezLa valeur
custom_config_key
peut ensuite être référencée à partir d'autres fichiers en utilisantla source
undefined method
.method_missing': undefined method
j'obtiens des erreurs, "... stocker 'pour # <Rails :: Application :: Configuration: 0x007f9f735b7240> ...". J'essayais d'ajouter la variable de configuration "config.store.works".store
c'est. Afin d'utiliser la méthode dans cette réponse, vous pouvez soit renommer votre variablestore_works
, soit créer unconfig.store
bloc avecworks
défini dans celle-ci.Cela fonctionne dans les rails 3.1:
dans config / environnement.rb (ou dans config / environnements / .. pour cibler un environnement spécifique):
Cela sera accessible dans le contrôleur ou dans des vues comme celle-ci:
(YourApp doit être remplacé par le nom de votre application.)
Remarque : C'est du code Ruby, donc si vous avez beaucoup de clés de configuration, vous pouvez le faire:
dans config / environment.rb:
la source
Dans Rails 4
En supposant que vous placez vos variables personnalisées dans un fichier yaml:
Créez un initialiseur pour les charger:
Maintenant, n'importe où dans votre application, vous pouvez accéder à ces valeurs comme suit:
Il est pratique de
Rails.application.config_for :acme
chargeracme.yml
et d'utiliser l'environnement correct.la source
Depuis Rails 4.2, sans gemmes supplémentaires, vous pouvez charger config / hi.yml simplement en utilisant
Rails.application.config_for :hi
.Par exemple:
touch config/passwords.yml
touch config/initializers/constants.rb
et maintenant vous pouvez utiliser
AUTHENTICATION
constant partout dans votre application:puis ajouter passwords.yml à .gitignore :
echo /config/passwords.yml >> .gitignore
, créez un fichier exemple pour votre confortcp /config/passwords.yml /config/passwords.example.yml
et il suffit d' éditer le fichier exemple dans votre console de production avec des valeurs réelles de production.la source
Je voulais juste mettre à jour ceci pour les derniers trucs sympas de Rails 4.2, vous pouvez maintenant le faire dans n'importe lequel de vos
config/**/*.rb
fichiers:... et cela sera disponible dans votre application sous la forme:
Voir plus ici: http://guides.rubyonrails.org/configuring.html#custom-configuration
la source
Découvrez ce joyau soigné en faisant exactement cela: https://github.com/mislav/choices
De cette façon, vos données sensibles ne seront pas exposées dans les projets open source
la source
J'ai créé un plugin simple pour les paramètres YAML: Yettings
Il fonctionne de manière similaire au code de la réponse de khelll, mais vous n'avez qu'à ajouter ce fichier de configuration YAML:
Le plugin crée dynamiquement une classe qui vous permet d'accéder aux paramètres YML en tant que méthodes de classe dans votre application, comme suit:
De plus, si vous souhaitez utiliser plusieurs fichiers de paramètres avec des noms uniques, vous pouvez les placer dans un sous-répertoire dans app / config comme ceci:
Ensuite, vous pouvez accéder aux valeurs comme ceci:
Il vous fournit également des paramètres par défaut qui peuvent être remplacés par environnement. Vous pouvez également utiliser erb dans le fichier yml.
la source
J'aime vraiment le bijou settingslogic . Très facile à installer et à utiliser.
https://github.com/binarylogic/settingslogic
la source
Si vous utilisez Heroku ou avez besoin de conserver les paramètres de votre application comme variables d'environnement, la gemme figaro est très utile.
la source
J'aime utiliser les paramètres de rails pour les valeurs de configuration globales qui doivent être modifiables via l'interface Web.
la source
Quelque chose que nous commençons à faire au travail est le hachage ordonné ActiveSupport
Ce qui vous permet de définir votre configuration proprement à l'intérieur des fichiers d'environnement par exemple
la source
Je suggérerais une bonne approche pour gérer la configuration dans votre application. Il existe trois règles de base:
Pour avoir une vue d'ensemble plus détaillée, suivez ce lien: Configuration correcte des rails
la source