質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.83%

  • Ruby on Rails 5

    1110questions

  • nginx

    777questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • Capistrano

    102questions

    Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

capistranoのdeploy:symlink:releasesのtaskの変え方

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 134

ryyoopi

score 2

 前提・実現したいこと

RailsアプリをVultrのCentOS7にcapistranoでデプロイしようとしています。
webサーバー:Nginx
appサーバー:puma
DB: MySQL2
cap production deployを実行中に以下のエラーメッセージが発生してしまいます。
以下の mv /var/www/アプリ名/releases/currentとなっている部分を/var/www/アプリ名/currentに指定するようにしたいです。
おそらく、taskを変えてあげればいいと思うのですが自力ではできませんでした。
どのようにしたらいいかをご教授いただけたら幸いです。

 発生している問題・エラーメッセージ

04:03 deploy:symlink:release
      01 ln -s /var/www/アプリ名/releases/20180504104932 /var/www/アプリ名/releases/current
    ✔ 01 deploy@IPアドレス 0.137s
      02 mv /var/www/アプリ名/releases/current /var/www/アプリ名
    ✔ 01 deploy@IPアドレス 0.218s02 deploy@IPアドレス 0.134s
      02 mv: `/var/www/アプリ名/releases/current' を stat できません: そのような?...
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host IPアドレス: mv exit status: 1
mv stdout: mv: `/var/www/アプリ名/releases/current' を stat できません: そのようなファイルやディレクトリはありません
mv stderr: Nothing written


Caused by:
SSHKit::Command::Failed: mv exit status: 1
mv stdout: mv: `/var/www/アプリ名/releases/current' を stat できません: そのようなファイルやディレクトリはありません
mv stderr: Nothing written

Tasks: TOP => deploy:symlink:release
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing on host IPアドレス: mv exit status: 1
mv stdout: mv: `/var/www/アプリ名/releases/current' を stat できません: そのようなファイルやディレクトリはありません
mv stderr: Nothing written

 該当のソースコード

config/deploy.rb

# config valid for current version and patch releases of Capistrano
lock "3.10.2"
server 'IPアドレス', port: 22, roles: [:app, :web, :db], primary:true
set :repo_url, "git@github.com:IchikiRyo/アプリ名.git"
set :application, "アプリ名"
set :user, 'deploy'
set :ssh_options, {
  forward_agent: true,
  user: fetch(:user),
  keys: %w(~/.ssh/id_rsa)
}
set :puma_threads, [4, 16]
set :puma_workers, 0
set :pty,          true
set :use_sudo,     false
set :stage,        :production
set :deploy_via,   :remote_cache
set :deploy_to,    "/var/www/#{fetch(:application)}"
set :puma_bind,    "unix://#{shared_path}/tmp/sockets/#{fetch(:application)}-puma.sock"
set :puma_state,   "#{shared_path}/tmp/pids/puma.state"
set :puma_pid,     "#{shared_path}/tmp/pids/puma.pid"
set :puma_access_log, "#{release_path}/log/puma.access.log"
set :puma_error_log, "#{release_path}/log/puma.error.log"
set :puma_preload_app, true
set :puma_worker_timeout, nil
set :puma_init_active_record, true
set :rbenv_type, :system
set :rbenv_ruby, '2.3.1'

# デプロイ対象としたくないディレクトリを記載
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads')

set :keep_releases, 3

  namespace :puma do
    desc 'Create Directories for Puma pids and Socket'
    task :make_dirs do
      on roles(:app) do
        execute "mkdir #{shared_path}/tmp/sockets -p"
        execute 'mkdir #{shared_path}/tmp/pids -p'
      end
    end
    before :start, :make_dirs
  end

  namespace :deploy do
    desc "Make sure local git is sync with remote."
    task :check_revision do
      on roles(:app) do
        unless `git rev-parse HEAD` == `git rev-parse origin/master`
          puts "WARNING: HEAD is not the same as origin/master"
          puts "Run `git push` to sync changes."
          exit
        end
      end
    end

    desc 'Upload database.yml'
    task :upload do
      on roles(:app) do |host|
        if test "[ ! -d #{release_path}/config ]"
          execute "mkdir -p #{release_path}/config"
        end
        upload!('config/database.yml', "#{release_path}/config/database.yml")
      end
    end
    desc 'Initial Deploy'
    task :initial do
      on roles(:app) do
        before 'deploy:restart', 'puma:start'
        invoke 'deploy'
      end
    end
    desc 'Restart application'
    task :restart do
      on roles(:app), in: :sequence, wait: 5 do
        invoke 'puma:restart'
      end
    end

    before :starting, :check_revision
    after 'git:create_release', 'deploy:upload'
    after :finishing, :compile_assets
    after :finishing, :cleanup
    after :finishing, :restart
  end


Capfile

require "capistrano/setup"
require "capistrano/deploy"
require 'capistrano/rails'
require "capistrano/rbenv"
require 'capistrano/bundler'
require 'capistrano/rails/migrations'
require 'capistrano/rails/assets'
require 'capistrano/puma'
require "capistrano/scm/git"
install_plugin Capistrano::SCM::Git
install_plugin Capistrano::Puma
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }


config/deploy/production.rb

set :production
set :branch, 'master'

server "IPアドレス",
  user: "deploy",
  roles: %w{web app db},
  ssh_options: {
    user: "deploy", # overrides user setting above
    keys: %w(~/.ssh/id_rsa),
    forward_agent: true,
    auth_methods: %w(publickey)
  }


Gemfile

group :development do
  # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
  gem 'capistrano', require: false
  gem 'capistrano-rails', require: false
  gem 'capistrano-bundler', require: false
  gem 'capistrano3-puma', require: false
  gem 'capistrano-rbenv', require: false
  gem 'capistrano-rbenv-vars'
end

 試したこと

config/deploy.rbにtaskとしてdeploy:symlink:releaseの処理を改変しようとしましたが自力ではできませんでした。
どのようにしたらいいか教えていただけると幸いです。

 補足情報(FW/ツールのバージョンなど)

ruby 2.3.1
rails 5.1.6

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

自己解決しました。
deploy.rbに下記のように問題のRake taskをclearして指定したいファイルを直接当ててあげれば解決できました。

Rake::Task["deploy:symlink:release"].clear
    namespace :symlink do
      desc 'Symlink release to current'
      task :release do
        on release_roles :all do
          execute :ln, '-s', release_path, current_path
        end
      end
    end

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails 5

    1110questions

  • nginx

    777questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • Capistrano

    102questions

    Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。