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

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

ただいまの
回答率

91.36%

  • Ruby on Rails

    5054questions

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

  • nginx

    613questions

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

  • Capistrano

    73questions

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

Rails5.1 + capistranoでcap deployした時に'public/assets' を作成できません: ファイルが存在しますというエラーが出る

解決済

回答 1

投稿 2017/12/04 19:18 ・編集 2017/12/04 19:28

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

big2017

score 11

railsアプリをcapistranoでデプロイする際にディレクトリ関連でのエラーが発生します。
単純な問題のように思えたのですが、なかなか解決できずに困っております。お手数おかけしますがアドバイスいただけると幸いです。

エラーログ

$ bundle exec cap production deploy

00:01 git:check
      01 git ls-remote git@github.com:user/sample_app.git HEAD
      01 c2asgasgabdd8d81asgasrgacd82609e80    HEAD
    ✔ 01 user@100.00.000.100 2.637s
00:03 deploy:check:directories
      01 mkdir -p /var/www/app/sample_app/shared /var/www/app/sample_app/releases
    ✔ 01 user@100.00.000.100 0.242s




deploy:check:linked_dirs   ## ここでエラーが起こります
01 mkdir -p /var/www/app/sample_app/shared/bin /var/www/app/sample_app/shared/log /var/www/app/sample_app/shared/tmp/pids /var/www/app/sample_app/shared/tmp/cache…
01 mkdir: ディレクトリ `/var/www/app/sample_app/shared/public/assets' を作成できません: ファイルが存在します

(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as user@100.00.000.100: mkdir exit status: 1
mkdir stdout: mkdir: ディレクトリ `/var/www/app/sample_app/shared/public/assets' を作成できません: ファイルが存在します
mkdir stderr: Nothing written

SSHKit::Command::Failed: mkdir exit status: 1
mkdir stdout: mkdir: ディレクトリ `/var/www/app/sample_app/shared/public/assets' を作成できません: ファイルが存在します
mkdir stderr: Nothing written

本日の14時頃まではなんの問題もなく同様のコマンドでデプロイができておりました。

思い当たる点として、config/deploy.rbを変更してしまい、そのあとに一度同様のコマンドでデプロイしてしまいました。その後に変更前に戻したりしましたが、エラーが治ることなく今に至っております。

config/deploy.rb

require 'pry'
# config valid for current version and patch releases of Capistrano
lock "~> 3.10.0"

set :application, "sample_app" # アプリケーション名
set :repo_url, "git@github.com:user/sample_app.git" # デプロイ対象のレポジトリ
set :deploy_to, '/var/www/app/sample_app' # デプロイするpath先

set :branch, 'master' # ブランチを指定
set :default_stage, 'development'
set :scm, :git
set :deploy_via, :remote_cache

set :log_level, :debug # 出力の制御
set :pty, true
set :bundle_binstubs, nil

# Shared に入るものを指定
set :linked_files, %w{config/database.yml config/secrets.yml} # シンボリックリンクを貼るファイル

set :linked_dirs,  %w{bin log tmp/pids tmp/cache tmp/sockets bundle public/system public/asset} # sharedにシンボリックリンクを張るディレクトリ指定
# set :linked_dirs, %w{bin log tmp/pids tmp/cache sockets bundle public/*} #一度こちらをコメントアウトしデプロイしたあとにこの問題が生じたように思われます。


# Unicorn
set :unicorn_pid, "#{shared_path}/tmp/pids/unicorn.pid"

# 5回分のreleasesを保持する
set :keep_releases, 5


after 'deploy:publishing', 'deploy:restart'
namespace :deploy do


 desc 'Restart application'
  # アプリ再起動を行うタスク
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :mkdir, '-p', release_path.join('tmp')
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end
  # linked_files で使用するファイルをアップロードするタスク
  #   # deployが行われる前に実行する必要がある。
  desc 'upload important files'
  task :upload do
    on roles(:app) do |host|
      execute :mkdir, '-p', "#{shared_path}/config"
      upload!('config/database.yml',"#{shared_path}/config/database.yml")
      upload!('config/secrets.yml',"#{shared_path}/config/secrets.yml")
    end
  end

  # webサーバー再起動時にキャッシュを削除する
  after :restart, :clear_cache do
   on roles(:web), in: :groups, limit: 3, wait: 10 do
    #Here we can do anything such as:
    within release_path do
      execute :rm, '-rf', release_path.join('tmp/cache')
    end
   end
  end
  # Flow の before, after のタイミングで上記タスクを実行
  before :started,   'deploy:upload'
  after  :finishing, 'deploy:cleanup'

  #unicorn 再起動タスク
  desc 'Restart application'
  task :restart do
    invoke 'unicorn:restart' # lib/capustrano/tasks/unicorn.cap 内処理を実行
  end
end

私なりに考えた解決方法として、
ディレクトリ `/var/www/app/sample_app/shared/public/assets' を作成できません: ファイルが存在します  とあるのでこのディレクトリを削除しようと試みましたが、うまく削除できずにいます。 どのような方法で削除できますでしょうか。 ローカルと本番サーバーで rm -rf public/assetsを行いましたがダメでした。

大変お手数おかけしますが、アドバイスいただけませんでしょうか。 何卒よろしくお願い申し上げます。

$ tail -f  log/capistrano.log


  INFO [0db11dc8] Running /usr/bin/env git ls-remote git@github.com:user/sample_app.git
   HEAD as user@000.00.000.100
 DEBUG [0db11dc8] Command: ( export RBENV_ROOT="/usr/local/rbenv" RBENV_VERSION="2.3.1"
 GIT_ASKPASS="/bin/echo" GIT_SSH="/tmp/git-ssh-sample_app-production-usersugawara.sh" ;
 /usr/bin/env git ls-remote git@github.com:user/sample_app.git HEAD )
 DEBUG [0db11dc8]     serfd5f8b0b2809fa40awerhwerh5097fc9e24    HEAD
  INFO [0db11dc8] Finished in 2.510 seconds with exit status 0 (successful).
  INFO [cd3913a7] Running /usr/bin/env mkdir -p /var/www/app/sample_app/shared
  /var/www/app/sample_app/releases as user@000.00.000.100
 DEBUG [cd3913a7] Command: ( export RBENV_ROOT="/usr/local/rbenv" RBENV_VERSION="2.3.1" ;
 /usr/bin/env mkdir -p /var/www/app/sample_app/shared /var/www/app/sample_app/releases )
  INFO [cd3913a7] Finished in 0.258 seconds with exit status 0 (successful).
  INFO [6753e35d]
  Running /usr/bin/env mkdir -p
  /var/www/app/sample_app/shared/bin
  /var/www/app/sample_app/shared/log
  /var/www/app/sample_app/shared/tmp/pids
  /var/www/app/sample_app/shared/tmp/cache
  /var/www/app/sample_app/shared/sockets
  /var/www/app/sample_app/shared/bundle
  /var/www/app/sample_app/shared/public/assets as user@000.00.000.100
 DEBUG [6753e35d] Command: ( export RBENV_ROOT="/usr/local/rbenv" RBENV_VERSION="2.3.1" ;
 /usr/bin/env mkdir -p
 /var/www/app/sample_app/shared/bin
 /var/www/app/sample_app/shared/log
 /var/www/app/sample_app/shared/tmp/pids
/var/www/app/sample_app/shared/tmp/cache
/var/www/app/sample_app/shared/sockets
/var/www/app/sample_app/shared/bundle
/var/www/app/sample_app/shared/public/assets )
 DEBUG [6753e35d]     mkdir: ディレクトリ
 `/var/www/app/sample_app/shared/public/assets' を作成できません: ファイルが存在します
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

check解決した方法

0

解決しましたので報告させていただきます。
assetsのパスが複数存在していたために、削除ができておりませんでした。

本番サーバーに入って、
sudo rm -rf /var/www/app/sample_app/shared/public/assets

で解決しました。

投稿 2017/12/04 23:24

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

ただいまの回答率

91.36%

関連した質問

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

  • Ruby on Rails

    5054questions

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

  • nginx

    613questions

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

  • Capistrano

    73questions

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

  • トップ
  • nginxに関する質問
  • Rails5.1 + capistranoでcap deployした時に'public/assets' を作成できません: ファイルが存在しますというエラーが出る