我是Capistrano
新手,我看到有共享文件夹和选项:linked_files
。我认为共享文件夹用于在版本之间保存文件。但我的问题是,文件最终如何位于共享文件夹中?
另外,如果我想将另一个目录符号链接到当前目录,例如某个路径上的静态文件夹,我该如何将其放在linked_dirs
?
最后,如何将chmod 755
设置为linked_files和linked_dirs。
谢谢。
应用内的文件夹是指向共享目录中文件夹的符号链接。如果您的应用程序写入log/production.log
,它实际上会写入../shared/log/production.log
。这就是文件最终位于共享文件夹中的方式。
您可以通过查看 Capistrano 中的功能规范或测试来了解其工作原理。
如果你想chmod这些共享文件,你可以直接通过ssh做一次,因为它们在创建后不会被Capistrano修改。
要添加链接目录,请在deploy.rb
:
set :linked_dirs, %w{bin log tmp/backup tmp/pids tmp/cache tmp/sockets vendor/bundle}
或
set :linked_dirs, fetch(:linked_dirs) + %w{public/system}
Capistrano 3.5+
Capistrano 3.5 引入了数组字段append
。从官方文档中,您应该使用这些:
对于共享文件:
append :linked_files, %w{config/database.yml}
对于共享目录:
append :linked_dirs, %w{bin log public/uploads vendor/bundle}
我已经为 Capistrano 3 编写了一个任务,将您的配置文件上传到每个服务器的共享文件夹,它将按顺序检查这些目录:
- config/
- deploy/config/:stage/*.yml config/
- deploy/config/*.yml
并上传找到的所有配置文件。它只会上传已更改的文件。另请注意,如果两个目录上都有相同的文件,则第二个文件将被忽略。
代码如下: https://gist.github.com/Jesus/448d618c83fb0445ebbf
最后一件事,此任务只是将配置文件上传到您的远程共享文件夹,您仍然需要在 config/deploy.rb
中设置linked_files
,例如:
set :linked_files, %w{config/database.yml config/aws.yml}
更新:
如果您使用的是 Git,则可能需要忽略这些文件:
echo "config/deploy/config/*" >> .gitignore
您可以遵循 3 个简单的步骤来放置您不想在连续版本中更改的文件; 将您的文件添加到linked_files列表中。
set :linked_files, fetch(:linked_files, []).push('config.php')
选择要共享的所有文件。通过 scp 将此文件从本地传输到远程服务器
scp config.php deployer@amazon:~/capistrano/shared/config.php
现在,通过下面给出的命令进行部署:
bundle exec cap staging deploy
当然,可以根据生产,沙盒等要求更改暂存。
还有一件事,因为你不希望你的团队成员提交这样的文件。因此,将此文件放入您的 .gitignore 文件中。并将其推送到 git 远程存储库。
对于 Capistrano 3.5+,如官方文档中指定:
append :linked_dirs, ".bundle", "tmp"
对我来说,以上都不起作用,所以我最终在部署过程结束时添加了两个函数:
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"