Ruby on rails 如何在Capistrano部署期间将文件上载到发布目录?
Capistrano production.rb文件执行3个任务Ruby on rails 如何在Capistrano部署期间将文件上载到发布目录?,ruby-on-rails,ruby,deployment,rake,capistrano3,Ruby On Rails,Ruby,Deployment,Rake,Capistrano3,Capistrano production.rb文件执行3个任务 composer安装--无开发人员 mkdir存储器 上传!“.env.production”、“.env” 执行前2个,但上载失败:“没有这样的文件或目录” 我能够从命令行成功地scp文件 如何将文件复制到当前版本目录 $ cap --version Capistrano Version: 3.11.0 (Rake Version: 12.3.1) $ cap production deploy ... 01 mkdir -
- composer安装--无开发人员
- mkdir存储器
- 上传!“.env.production”、“.env”
$ cap --version
Capistrano Version: 3.11.0 (Rake Version: 12.3.1)
$ cap production deploy
...
01 mkdir -p ~/public_html/app/releases/20181122210112
...
composer install --no-dev
...
mkdir storage
...
SSHKit::Runner::ExecuteError:
Exception while executing as me@site.com:
scp: ~/public_html/app/releases/20181122210112/.env:
No such file or directory
DEBUG Uploading .env.production 0.0%
...
$
从命令行成功地scp文件:
$ scp .env.production me@site.com:~/public_html/app/releases/20181122210112/.env
production.rb
# use absolute path
set :deploy_to, "/home/user/public_html/app"
namespace :deploy do
desc "Install app dependencies with composer"
after :updated, :build do
on roles(:web) do
within release_path do
execute :composer, "install --no-dev"
execute :mkdir, "storage"
end
end
end
end
namespace :deploy do
desc "Copy Env"
after :finished, :copy do
on roles(:all) do
upload! ".env.production", "#{release_path}/.env"
end
end
end
如果需要将本地application.yml复制到服务器,并且您已经在使用capistrano,则可以使用,它会创建一个任务来更新服务器上的此文件。理论上,您可以自动运行任务并更新此文件。是一颗古老的宝石,但它像一个符咒一样工作,并完成工作。使用~/homedir相对路径在Capistrano中不起作用,至少对于上传来说是如此!方法~是Bash快捷方式,而不是SCP,因此SCP找不到目录。绝对路径设置:部署到“/home/user/public\u html/app”解决了这个问题。