【问题标题】:How to upload a file to release directory during Capistrano deploy?Capistrano 部署期间如何将文件上传到发布目录?
【发布时间】:2019-04-25 13:55:44
【问题描述】:

Capistrano production.rb 文件执行 3 个任务

  • composer install --no-dev

  • mkdir 存储

  • 上传! “.env.production”、“.env”

前2个都执行了,但是上传失败:“No such file or directory”。

我能够从命令行成功地 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

生产.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

【问题讨论】:

  • 使用 ~/homedir 相对路径在 Capistrano 中不起作用,至少对于上传而言!方法。 ~ 是 Bash 快捷方式,不是 SCP,所以 SCP 找不到目录。绝对路径集 :deploy_to, "/home/user/public_html/app" 解决了这个问题。

标签: ruby-on-rails ruby deployment rake capistrano3


【解决方案1】:

如果您需要将本地 application.yml 复制到服务器,并且您已经在使用 capistrano,则可以使用 capistrano figaro gem,它会创建一个任务来更新服务器上的此文件。理论上,您可以自动运行任务并更新此文件。是一颗古老的宝石,但它的作用就像一个魅力,并且做的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多