如何将文件复制到capistrano共享文件夹

时间:2013-06-03 01:34:28

标签: ruby-on-rails capistrano

我的文件config/secrets.yml必须位于共享文件夹中的远程服务器中。它不在我的git repo中,所以它没有像其他常规文件那样更新。

我不知道第一次生成文件的方式。

到目前为止我所做的是每次使用

部署时创建一个符号链接
run "ln -nfs #{shared_path}/config/secrets.yml #{release_path}/config/secrets.yml"

将在每次部署中“更新”文件,但第一次?如何第一次生成secret.yml

2 个答案:

答案 0 :(得分:7)

您必须添加到.gitignore文件中:

/config/secrets.yml

上限任务:

task :symlink_config, roles: :app do
  run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
  run "ln -nfs #{shared_path}/config/secrets.yml #{release_path}/config/secrets.yml"
end
after "deploy:finalize_update", "deploy:symlink_config"

共享文件夹中的.yml文件我通常是自己创建的。

答案 1 :(得分:0)

如果您使用的是capistrano v3.x,则可以轻松使用:linked_files配置变量来实现此目的。

您可以安全地将config/secrets.yml添加到.gitignore并使用capistrano的:linked_files配置变量。

capistrano通常会在您config/database.yml时为数组添加config/secrets.ymlcap install的模板行。您只需取消注释该行,如下所示: set :linked_files, fetch(:linked_files, []).push('config/database.yml', 'config/secrets.yml')

关于如何首次生成secrets.yml文件(当然是一次性任务),您必须运行rake secret并将生成的密钥放入其中,在文件中。它看起来像这样:

development:
  secret_key_base: <some alphanumeric hash>
  some_key: 338a3312d82
  some_secret: f5d9c3214e7b
  other_environment: development
  other_password: password

production:
  secret_key_base: <the key generated with `rake secret`>
  some_key: 338a3312d82
  some_secret: f5d9c3214e7b
  other_environment: development
  other_password: password