Je suis nouveau sur Capistrano
et j'ai vu qu'il y a un dossier partagé et également l'option :linked_files
. Je pense que le dossier partagé est utilisé pour conserver les fichiers entre les versions. Mais ma question est, comment les fichiers se retrouvent-ils dans le dossier partagé?
De plus, si je veux créer un lien symbolique entre un autre répertoire et le répertoire actuel, par exemple dossier statique à un certain chemin, comment puis-je le mettre dans le linked_dirs
?
Enfin, comment définir chmod 755
aux fichiers liés et aux fichiers liés.
Merci.
Les dossiers à l'intérieur de votre application sont des liens symboliques vers des dossiers du répertoire partagé. Si votre application écrit dans log/production.log
, il écrira en fait à ../shared/log/production.log
. C'est ainsi que les fichiers se retrouvent dans le dossier partagé.
Vous pouvez voir comment cela fonctionne en regardant les spécifications de fonctionnalités ou tests dans Capistrano .
Si vous souhaitez modifier ces fichiers partagés, vous pouvez le faire une seule fois directement sur ssh car ils ne seront jamais modifiés par Capistrano après leur création.
Pour ajouter un répertoire lié, dans votre deploy.rb
:
set :linked_dirs, %w{bin log tmp/backup tmp/pids tmp/cache tmp/sockets vendor/bundle}
ou
set :linked_dirs, fetch(:linked_dirs) + %w{public/system}
J'ai écrit une tâche pour Capistrano 3 pour télécharger vos fichiers de configuration dans le dossier partagé de chacun de vos serveurs, il vérifiera ces répertoires dans l'ordre:
Et téléchargez tous les fichiers de configuration trouvés. Il ne téléchargera les fichiers que s'ils ont changé. Notez également que si vous avez le même fichier sur les deux répertoires, le second sera ignoré.
Voici le code: https://Gist.github.com/Jesus/448d618c83fb0445ebbf
Une dernière chose, cette tâche consiste simplement à télécharger la configuration. fichiers dans votre dossier partagé distant, vous devez toujours définir linked_files
dans config/deploy.rb
, par exemple:
set :linked_files, %w{config/database.yml config/aws.yml}
MISE À JOUR:
Si vous utilisez Git, vous voudrez probablement ignorer ces fichiers:
echo "config/deploy/config/*" >> .gitignore
Capistrano 3.5 a introduit append
pour les champs de tableau. D'après les documents officiels , vous devez les utiliser:
Pour les fichiers partagés:
append :linked_files, %w{config/database.yml}
Pour les répertoires partagés:
append :linked_dirs, %w{bin log public/uploads vendor/bundle}
Vous pouvez suivre trois étapes simples pour placer un fichier que vous ne souhaitez pas modifier dans les versions consécutives; ajoutez votre fichier à la liste des fichiers liés.
set :linked_files, fetch(:linked_files, []).Push('config.php')
Sélectionnez tous les fichiers que vous souhaitez partager. Placez ce fichier de votre serveur local vers un serveur distant via scp
scp config.php deployer@Amazon:~/capistrano/shared/config.php
Maintenant, déployez via la commande donnée ci-dessous:
bundle exec cap staging deploy
bien sûr, mise en scène peut être modifié selon les exigences peut être la production, le bac à sable, etc.
Encore une chose, car vous ne voulez pas que les membres de votre équipe valident de tels fichiers. Alors, mettez ce fichier dans votre fichier .gitignore. Et poussez-le pour git repo à distance.
Pour Capistrano 3.5 + , comme spécifié dans doc officiel :
append :linked_dirs, ".bundle", "tmp"
Pour moi, aucun des éléments ci-dessus n'a fonctionné, j'ai donc ajouté deux fonctions à la fin du processus de déploiement:
namespace :your_company do
desc "remove index.php"
task :rm_files do
on roles(:all) do
execute "rm -rf #{release_path}/index.php"
end
end
end
namespace :your_company do
desc "add symlink to index.php"
task :add_files do
on roles(:all) do
execute "ln -sf #{shared_path }/index.php #{release_path}/index.php"
end
end
end
after "deploy:finished", "your_company:rm_files"
after "deploy:finished", "your_company:add_files"