Capistrano – 如何把文件放在共享文件夹中?

我是新来的Capistrano ,我看到有共享文件夹和选项:linked_files 。 我认为共享文件夹是用来保持文件之间的版本。 但我的问题是,文件如何最终在共享文件夹?

另外,如果我想将另一个目录符号链接到当前目录,例如某个path下的静态文件夹,我该如何将它放在linked_dirs

最后如何将chmod 755设置为linked_files和linked_dirs。

谢谢。

应用程序中的文件夹是符号链接到共享目录中的文件夹。 如果您的应用程序写入log/production.log ,它将实际写入../shared/log/production.log 。 这就是文件最终在共享文件夹中的方式。

您可以通过查看Capistrano中的function规格或testing来了解它是如何工作的。

如果你想chmod这些共享文件,你可以直接通过ssh执行一次,因为在capistrano创build之后它们将不会被修改。

要添加一个链接的目录,请在你的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编写了一个任务,将您的configurationfile upload到每个服务器的共享文件夹,它将按顺序检查这些目录:

  1. configuration/部署/configuration/:舞台/ *阳明
  2. configuration/部署/configuration/ *。YML

并上传find的所有configuration文件。 它只会上传文件,如果他们已经改变。 还要注意,如果你在两个目录上都有相同的文件,那么第二个目录将被忽略。

这是代码: https : //gist.github.com/Jesus/448d618c83fb0445ebbf

最后一件事,这个任务只是上传configuration。 文件到您的远程共享文件夹,您仍然需要在config/deploy.rb设置config/deploy.rb ,例如:

 set :linked_files, %w{config/database.yml config/aws.yml} 

更新:

如果你使用Git,你可能会想忽略这些文件:

 echo "config/deploy/config/*" >> .gitignore 

Capistrano 3.5+

Capistrano 3.5引入了数组字段的append 。 从官方文档 ,你应该使用这些:

对于共享文件:

 append :linked_files, %w{config/database.yml} 

对于共享目录:

 append :linked_dirs, %w{bin log public/uploads vendor/bundle} 

有三个简单的步骤,你可以按照一个文件,你不想改变连续发布; 将你的文件添加到linked_files列表。

 set :linked_files, fetch(:linked_files, []).push('config.php') 

select你想分享的所有文件。 把这个文件从本地通过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"