Ruby on rails 如何在Capistrano部署期间将文件上载到发布目录?

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 -

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 -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”解决了这个问题。