Capistrano - 如何将文件放入共享文件夹?

Faj*_*rmf 45 capistrano config web-deployment

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

另外,如果我想将另一个目录符号链接到当前目录,例如某个路径上的静态文件夹,我该怎么把它放在linked_dirs

最后,如何设置chmod 755为linked_files和linked_dirs.

谢谢.

Mic*_*ael 62

应用程序内的文件夹是共享目录中文件夹的符号链接.如果您的应用程序写入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}
Run Code Online (Sandbox Code Playgroud)

要么

set :linked_dirs, fetch(:linked_dirs) + %w{public/system}
Run Code Online (Sandbox Code Playgroud)

  • 在最新的2.x capistrano`中:linked_dirs`被称为`:shared_children` (8认同)
  • 至于capistrano 3.x,它似乎又是`:linked_dirs` (5认同)

xuu*_*uso 10

我为Capistrano 3编写了一个任务,将您的配置文件上传到每个服务器的共享文件夹中,它将按顺序检查这些目录:

  1. 配置/部署/配置/:舞台/*阳明
  2. 配置/部署/配置/*.YML

并上传找到的所有配置文件.只有在文件发生变化时才会上传文件.另请注意,如果两个目录上都有相同的文件,则第二个目录将被忽略.

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

最后一件事,这个任务就是上传配置.文件到远程共享文件夹,你仍然需要设置linked_filesconfig/deploy.rb,例如:

set :linked_files, %w{config/database.yml config/aws.yml}
Run Code Online (Sandbox Code Playgroud)

更新:

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

echo "config/deploy/config/*" >> .gitignore
Run Code Online (Sandbox Code Playgroud)


She*_*yar 9

Capistrano 3.5+

Capistrano 3.5 append为阵列领域引入.从官方文档中,您应该使用以下内容:

对于共享文件:

append :linked_files, %w{config/database.yml}
Run Code Online (Sandbox Code Playgroud)

对于共享目录:

append :linked_dirs, %w{bin log public/uploads vendor/bundle}
Run Code Online (Sandbox Code Playgroud)

  • 对于现在遇到这个问题的其他人来说,上面的方法对我不起作用,但这个替代方法可以:`append :linked_files, 'config/database.yml', 'etc etc etc', 'etc etc'` 也就是说,它不再喜欢数组,它需要字符串。 (2认同)

Ank*_*rma 5

您可以按照 3 个简单的步骤将不想更改的文件放入连续版本中;将您的文件添加到 linked_files 列表中。

set :linked_files, fetch(:linked_files, []).push('config.php')
Run Code Online (Sandbox Code Playgroud)

选择您要共享的所有文件。通过 scp 将该文件从本地发送到远程服务器

scp config.php deployer@amazon:~/capistrano/shared/config.php
Run Code Online (Sandbox Code Playgroud)

现在,通过下面给出的命令进行部署:

bundle exec cap staging deploy
Run Code Online (Sandbox Code Playgroud)

当然,分期可以根据生产、沙盒等要求进行更改。

另一件事是,因为您不希望您的团队成员提交此类文件。因此,将此文件放入您的 .gitignore 文件中。并将其推送到 git 远程仓库。