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

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

ただいまの
回答率

89.23%

Capistranoを使ってassets:precompileができない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,927
退会済みユーザー

退会済みユーザー

いつもお世話になっています。

表題の通り、Capistranoを使ってRailsアプリをVPSにデプロイしているのですが、VPS内でassets:precompileができなくて困っています。

 現在やりたいこと

Capistranoを使ってRailsアプリをVPSにデプロイ&VPS内でassets:precompileをしたいです。

試しにローカル環境内で以下のコマンドを試したところ上手くコンパイルできましたが、Capistranoを使った本番VPSのコンパイルはできない状況です。

bundle exec rake assets:precompile RAILS_ENV="production"

 環境

  • Ruby 2.4.2

  • Rails 5.1.6

  • gem Capistrano3

  • 本番VPS CentOS 7.1

 現在の状況

Capistranoを使って、GitHubを通して本番VPSにRailsアプリをデプロイすることには成功しました。

そして、bundle installも成功しており、本番VPSのディレクトリを確認してgemが入っていることも確認済みです。

本番VPS内には、rbenvやRuby、bundler,node jsも入っています。

しかし、Capistranoを通してassets:precompileをする場合に、以下のようなエラーが発生してできません。

  INFO [a634683c] Running RBENV_ROOT=$HOME/.rbenv RBENV_VERSION=2.4.2 $HOME/.rbenv/bin/rbenv exec bundle install --path /var/www/hoge_app/shared/bundle --without development test --deployment --quiet as hogehoge@111.11.1.1
 DEBUG [a634683c] Command: cd /var/www/putiita_app/releases/20181109081627 && ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.4.2" ; RBENV_ROOT=$HOME/.rbenv RBENV_VERSION=2.4.2 $HOME/.rbenv/bin/rbenv exec bundle install --path /var/www/hoge_app/shared/bundle --without development test --deployment --quiet )
  INFO [c6ddacae] Finished in 0.532 seconds with exit status 0 (successful).
  INFO [1bd6185f] Running RBENV_ROOT=$HOME/.rbenv RBENV_VERSION=2.4.2 $HOME/.rbenv/bin/rbenv exec bundle exec rake assets:precompile as hogehoge@111.11.1.1
 DEBUG [1bd6185f] Command: cd /var/www/hoge_app/releases/20181109081627 && ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.4.2" RAILS_ENV="production" RAILS_GROUPS="" ; RBENV_ROOT=$HOME/.rbenv RBENV_VERSION=2.4.2 $HOME/.rbenv/bin/rbenv exec bundle exec rake assets:precompile )
 DEBUG [2afac4e6]     rake aborted!
 DEBUG [2afac4e6]     NoMethodError: undefined method `deep_symbolize_keys' for #<String:0x00007fa4442f6c88>

/var/www/putiita_app/shared/bundle/ruby/2.4.0/gems/railties-5.1.6/lib/rails/secrets.rb:29:in `block in parse'
/var/www/putiita_app/shared/bundle/ruby/2.4.0/gems/railties-5.1.6/lib/rails/secrets.rb:24:in `each'

試しにローカル環境内で

bundle exec rake assets:precompile RAILS_ENV="production"

を実行すると、上手くコンパイルできます。

 当該エラーに該当するであろうコード

以下は、当該エラーに該当するであろうコードを載せます。

# config valid for current version and patch releases of Capistrano
lock "~> 3.11.0"

set :repo_url,        'git@github.com:hogehoge/hoge.git'
set :application,     'hoge_app'
set :branch, 'master'
set :user,            'hoge_user'
set :ssh_options,     {
  forward_agent: true,
  user: fetch(:user),
  keys: %w(~/.ssh/github/id_rsa)
}
set :puma_threads,    [4, 16]
set :puma_workers,    0
set :keep_releases, 5
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, :user
set :rbenv_ruby, '2.4.2'
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
set :rbenv_map_bins, %w{rake gem bundle ruby rails}
set :rbenv_roles, :all
append :linked_dirs, 'log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads'
append :linked_files, 'config/database.yml', 'config/secrets.yml'

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 in 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 '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  :finishing,    :compile_assets
  after  :finishing,    :cleanup
end
server '本番VPSのIPアドレス', user: 'hoge_user', roles: %w{web app}, port: 19435
server '本番VPSのIPアドレス', user: 'hoge_user', roles: %w{db}, port: 19435
set :ssh_options, keys: '~/.ssh/conoha'
require "capistrano/setup"
require "capistrano/deploy"
require "capistrano/rbenv"
require "capistrano/bundler"
require "capistrano/rails/assets"
require "capistrano/rails/migrations"
require 'capistrano/puma'
require "capistrano/scm/git"
install_plugin Capistrano::Puma
install_plugin Capistrano::SCM::Git



# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

check解決した方法

0

自己解決できました。

config/secrets.ymlのインデントを修正することで直すことができました。

色々なサイトを見てみると、

NoMethodError: undefined method `deep_symbolize_keys' for #<String:0x00007fa4442f6c88>

と言ったエラーが表示された場合は、 

  • config/database.yml 
    -config/secrets.yml

などを調べると良いかもしれません

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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