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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

nginx

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

Capistrano

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

Q&A

解決済

1回答

745閲覧

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

ryoii

総合スコア6

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

nginx

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

Capistrano

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

0グッド

0クリップ

投稿2018/05/04 14:16

編集2018/06/08 05:01

前提・実現したいこと

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.218s ✔ 02 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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

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

投稿2018/05/08 10:35

ryoii

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問