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

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

ただいまの
回答率

90.52%

  • Ruby on Rails

    7245questions

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

  • Capistrano

    114questions

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

Rails MySQLのCapistrano設定について

解決済

回答 1

投稿 編集

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

ruby_0ct

score 38

DBをMySQLに変更したのですが、Capistranoでデプロイすると、デフォルトのSQLiteでマイグレーションされてしまいます。
MySQLの方にデーブルが作成されません。

Capistranoの設定が原因だと思うのですが、MySQLを使ってデプロイしている記事をいくつか見ても、
特別設定している様子はなく、本当に設定する必要ないのかと疑問になり質問しました。

MySQL用に設定した記事が1つだけありましたが、この設定があってるのかが疑問です。
【入門】Capistrano3で自動デプロイ
項目の「デプロイ」より上の部分に設定が書いてあります。

どのようにすれば良いか、ご回答よろしくお願います。

/config/database.yml

production:
  adapter: mysql2
  encoding: utf8
  database: アプリ名_production
  pool: 5
  username: production
  password: パスワード

/config/deploy.rb

lock "~> 3.10.2"

set :application, "アプリ名"
set :repo_url, "git@github.com:〇〇.git"

set :deploy_to, '/var/www/html'

 set :default_env, {
  :DEVISE_SECRET_KEY => ENV['DEVISE_SECRET_KEY']
}
set :format_options, truncate: false

append :linked_files, "config/database.yml"

set :linked_files, %w{config/database.yml config/secrets.yml}
set :linked_files, fetch(:linked_files, []).push('config/secrets.yml')
set :linked_dirs, %w{bin log tmp/pids tmp/cache sockets bundle public/system public/assets}

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

set :ssh_options, { verify_host_key: :secure, forward_agent: true }
 set :rbenv_type, :user
 set :rbenv_ruby, '2.5.1'
 set :rbenv_custom_path, '/root/.rbenv'
 set :log_level, :debug

after 'deploy:publishing', 'deploy:restart'
namespace :deploy do
  task :restart do
    on roles(:app) do
      within current_path do
        if test("[ -e #{fetch(:unicorn_pid)} ]")
          execute :kill, "-s QUIT ", pid
        end
        secret = capture :bundle, "exec rake secret"
        execute "echo SECRET_KEY_BASE='#{secret}' > #{current_path}/.env"
        execute :bundle, "exec unicorn", "-c", fetch(:unicorn_config_path), "-E", fetch(:rails_env), "-D"
      end
    end
  end
end

/config/deploy/production.rb

server "ドメイン名", user: "root", roles: %w{app db web}
set :unicorn_pid, "#{shared_path}/tmp/pids/unicorn.pid"
set :ssh_options, {
   port: 22,
   keys: %w(~/.ssh/github/github),
 }

デプロイ先ディレクトリの中身

# ls -l /var/www/html/
合計 20
lrwxrwxrwx 1 root root   37  6月 26 23:36 current -> /var/www/html/releases/20180626143558
-rw-r--r-- 1 root root  952  5月 22 03:20 index.html
drwxr-xr-x 7 root root 4096  6月 26 23:36 releases
drwxr-xr-x 7 root root 4096  6月 26 23:35 repo
-rw-r--r-- 1 root root  654  6月 26 23:36 revisions.log
drwxr-xr-x 9 root root 4096  6月  1 15:34 shared

デプロイ時の実行ログ(関係ありそうなマイグレーション部分を抜粋)

00:06 deploy:symlink:linked_files
      01 mkdir -p /var/www/html/releases/20180626143558/config
    ✔ 01 root@ドメイン名 0.123s
      02 rm /var/www/html/releases/20180626143558/config/database.yml
    ✔ 02 root@ドメイン名 0.095s
      03 ln -s /var/www/html/shared/config/database.yml /var/www/html/releases/20180626143558/config/database.yml
    ✔ 03 root@ドメイン名 0.096s
      04 rm /var/www/html/releases/20180626143558/config/secrets.yml
    ✔ 04 root@ドメイン名 0.093s
      05 ln -s /var/www/html/shared/config/secrets.yml /var/www/html/releases/20180626143558/config/secrets.yml
    ✔ 05 root@ドメイン名 0.094s
** Invoke deploy:symlink:linked_dirs (first_time)
** Execute deploy:symlink:linked_dirs
(略)
** Invoke deploy:migrate (first_time)
** Invoke deploy:set_rails_env 
** Execute deploy:migrate
00:17 deploy:migrate
      [deploy:migrate] Run `rake db:migrate`
** Invoke deploy:migrating (first_time)
** Invoke deploy:set_rails_env 
** Execute deploy:migrating
00:17 deploy:migrating

00:17 deploy:migrating
      01 /root/.rbenv/bin/rbenv exec bundle exec rake db:migrate
      01 == 20180615143842 Createテーブル名: migrating ==================================
      01 -- create_table(:テーブル名)
      01    -> 0.0008s
      01 == 20180615143842 Createテーブル名: migrated (0.0009s) =========================

(同様のテーブル生成は略)

    ✔ 01 root@ドメイン名 2.124s

全体的なデプロイ実行ログ

$ bundle exec cap production deploy --trace
00:00 git:wrapper
00:00 git:check
00:02 deploy:check:directories
00:02 deploy:check:linked_dirs
00:02 deploy:check:make_linked_dirs
00:02 git:clone
00:02 git:update
00:04 git:create_release
00:06 deploy:set_current_revision
00:06 deploy:symlink:linked_files
      01 mkdir -p /var/www/html/releases/20180626143558/config
    ✔ 01 root@ドメイン名 0.123s
      02 rm /var/www/html/releases/20180626143558/config/database.yml
    ✔ 02 root@ドメイン名 0.095s
      03 ln -s /var/www/html/shared/config/database.yml /var/www/html/releases/20180626143558/config/database.yml
    ✔ 03 root@ドメイン名 0.096s
      04 rm /var/www/html/releases/20180626143558/config/secrets.yml
    ✔ 04 root@ドメイン名 0.093s
      05 ln -s /var/www/html/shared/config/secrets.yml /var/www/html/releases/20180626143558/config/secrets.yml
    ✔ 05 root@ドメイン名 0.094s
** Invoke deploy:symlink:linked_dirs (first_time)
** Execute deploy:symlink:linked_dirs
00:07 deploy:symlink:linked_dirs
00:10 bundler:install
00:11 deploy:assets:precompile
00:16 deploy:assets:backup_manifest
00:17 deploy:migrate
      [deploy:migrate] Run `rake db:migrate`
** Invoke deploy:migrating (first_time)
** Invoke deploy:set_rails_env 
** Execute deploy:migrating
00:17 deploy:migrating

00:17 deploy:migrating
      01 /root/.rbenv/bin/rbenv exec bundle exec rake db:migrate
      01 == 20180615143842 Createテーブル名: migrating ==================================
      01 -- create_table(:テーブル名)
      01    -> 0.0008s
      01 == 20180615143842 Createテーブル名: migrated (0.0009s) =========================

(同様のテーブル生成部分は略)

    ✔ 01 root@ドメイン名 2.124s
** Invoke deploy:publishing (first_time)
** Execute deploy:publishing
** Invoke deploy:symlink:release (first_time)
** Execute deploy:symlink:release
00:19 deploy:symlink:release
00:21 deploy:restart
00:23 deploy:cleanup
00:25 deploy:log_revision

 バージョン

mysql  Ver 8.0.11 for Linux on x86_64 (MySQL Community Server - GPL)
Rails 5.0.7

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • ruby_0ct

    2018/06/27 12:35

    k-fukudaさん bundle exec cap production deploy --trace で実行しています。

    キャンセル

  • ryochin

    2018/06/27 16:22

    情報が足りません。せめて ls -l /var/www/html/ の結果や cap コマンドの出力などが欲しいところです。

    キャンセル

  • ruby_0ct

    2018/06/28 00:07 編集

    文字数制限の関係で、デプロイ時の実行ログすべては追記できませんでしたが、デプロイを実行した際のログとls -l /var/www/html/の結果を追記しました。

    キャンセル

回答 1

checkベストアンサー

0

実際には /var/www/html/shared/config/database.yml に書いてある内容が読み込まれている、ということですね。あなたの手元(リポジトリ)にある config/database.yml は rm -> symlink されている、とあります。

単純に /var/www/html/shared/config/database.yml の中は SQLite の設定が書いてある(おそらくデフォルトのまま)ということだと思われます。こちらのファイルを編集してみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/06/28 03:23

    おっしゃる通りでした。編集したところ、うまくいきました。
    ありがとうございます。

    キャンセル

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

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

関連した質問

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

  • Ruby on Rails

    7245questions

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

  • Capistrano

    114questions

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