web-dev-qa-db-fra.com

Capistrano - Comment mettre des fichiers dans le dossier partagé?

Je suis nouveau sur Capistranoet 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.

45
Fajarmf

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}
61
Michael

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:

  1. config/deploy/config /: stage/*. yml
  2. config/deploy/config/*. yml

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
9
xuuso

Capistrano 3.5+

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}
8
Sheharyar

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.

4
Ankit Vishwakarma

Pour Capistrano 3.5 + , comme spécifié dans doc officiel :

append :linked_dirs, ".bundle", "tmp"
2
Elodie

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"
0
Shay Zalman