Non non non! Ne modifiez pas les fichiers d'environnement. Je veux dire, éditez-les comme vous devez pour les choses qui doivent être configurées le même pour chaque déploiement, mais pas pour les choses qui devraient être configurable entre les déploiements.
Pour cela, utilisez la configuration.
Throw un fichier YAML dans config
qui ressemble à ceci:
development:
:app_name: App 1
:host_name: something.com
test:
:app_name: App 1
:host_name: something.com
production:
:app_name: App 1
:host_name: something.com
Appelez cela comme logique. Disons settings.yml
.
charger maintenant avec un initialiseur à config/initializers/settings.rb
qui ressemble à ceci:
SETTINGS = YAML.load_file("#{RAILS_ROOT}/config/settings.yml")[RAILS_ENV]
maintenant accès à la configuration comme ceci:
SETTINGS[:app_name]
(Si vous ne voulez pas changer votre code existant à tout, à l'intérieur config/initializers/settings.rb
ajouter des lignes qui définissent vos noms existants comme APP_NAME = SETTINGS[:app_name]
, etc.)
Notez qu'il s'agit d'un imp lementation de la configuration des paramètres, mais même si une autre approche est adoptée, elle doit être basée sur une configuration indépendante du déploiement. Cela peut être mis en place de manière beaucoup plus facile et maintenable pour persister entre les déploiements et les mises à niveau que le déblayage avec des fichiers d'environnement.
Encore une fois, pour récapituler:
- fichiers d'environnement sont pour la configuration qui est la même dans tous les déploiements
- fichiers de configuration sont pour la configuration qui peut changer entre les déploiements
Mise à jour
Pour les déploiements basés sur Capistrano, c'est ce que j'utilise pour symlink multi les fichiers de configuration PLE dans la nouvelle current
à partir du répertoire shared
(je pense qu'il est originaire d'une recette de Ezra EngineYard):
after "deploy:update_code","deploy:symlink_configs"
namespace(:deploy) do
task :symlink_configs, :roles => :app, :except => {:no_symlink => true} do
configs = %w{ database settings }
configs.map! { |file| "ln -nfs #{shared_path}/config/#{file}.yml #{release_path}/config/#{file}.yml" }
run <<-CMD
cd #{release_path} && #{configs.join(' && ')}
CMD
end
end
sens. Mais comment puis-je obtenir différents fichiers de paramètres sur chaque déploiement? – zaius
On suppose qu'ils ont aussi différentes bases de données. Vous utilisez la même stratégie que vous utilisez pour leur donner différents fichiers config/database.yml. Sur les déploiements basés sur Capistrano, cela signifie généralement que les fichiers se trouvent dans le répertoire partagé. –
Aha! C'est ce que je cherchais. Ainsi, chaque emplacement de déploiement aurait ses propres fichiers de paramètres, et j'utilise mon outil de déploiement de choix pour créer un lien symbolique. Parfait merci! – zaius