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

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

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

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Ruby on Rails

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

BitBucket

BitBucketは無料のリポジトリ管理ホスティングサービスです。 MercurialとGitのVCSに対応しています。プライベートリポジトリを、制限なく作成することが可能です。

Capistrano

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

Q&A

1回答

1875閲覧

Capistrano3のデプロイに関して

yabo

総合スコア30

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Ruby on Rails

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

BitBucket

BitBucketは無料のリポジトリ管理ホスティングサービスです。 MercurialとGitのVCSに対応しています。プライベートリポジトリを、制限なく作成することが可能です。

Capistrano

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

0グッド

0クリップ

投稿2017/01/05 07:23

Capistrano3のデプロイに関して

現環境

  • local git
  • remoteripo Bitbucket
  • buildtool Wercker
  • deploy Capistrano3
  • public sakura vps(ssh)
  • Web環境 nginx+ puma + rails + public配下にwpを設置(php-fpm)

記事・画像管理などはWordpressで行っております。
Capistrano3でデプロイすると新ディレクトリが作成されcurrentのシンボリックリンクが最新のリリースにはられると認識しております。
現状、WordPress管理画面で画像をアップロードするとpublicサーバ上のcurrent/public/wp-content/uploads/配下にファイルがupされます。

Capistrano3でデプロイしますと、本番環境で更新があったファイルはGit管理に追加されていないため全て置き換えられてしまいます。
ココで質門なんですが本番環境の更新内容を取り込むタスクをベスト・プラクティスな運用パターンか教えていただきたく質門させていただきました。
また、Capistrano3の文法などもあまり詳しくなく記述方法なども提示いただけるとありがたいです。

Capistrano3のデプロイ順序(現在)

  1. ssh publish-server
  2. mkdir 201701**** (newrelease)
  3. git pull
  4. rails系の処理(bundle install,test,precompile,migrate)
  5. currentへのシンボリックリンク
  6. web server restart(nginx puma php-fom)

本番の変更を取り込む方法など

case.1 1個前のリリースにある、uploadsディレクトリをコピーする設定をcapに追加する

追加したいコマンド例

cp -a releases/"リリース前のrelease dir"/public/wp/wp-content/uploads/ current/public/wp/wp-content/

このケースがとりあえずの回避策として無難かと考えています。
しかし、前のリリースを取る方法(変数)などがいまいちわからずTask化できず困っております。

case.2 デプロイの前に本番環境の更新をaddコミットしてからリリースする設定を追加する

現設定ではmasterへのpushをwerckerのbuild+deployトリガーとしているため,deployが無限ループするのではないかと懸念しています。
特定のサーバからのpushは除外するもしくは本番環境からのpushは別ブランチに取り込んでからbuild環境でmergeするなど(conflictがあるとエラーとなりそう。)、リモートのいい方法などないでしょうか

現在は公開環境にてリリース後にcase1のコマンドを実施して応急的に対応しています。
そもそも、環境の作り方など他のやりかたが良いなどベストプラクティスがあれば教えていただきたいです。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

capistranoの設定で

ruby

1set :linked_dirs, %w(public/wp-content/uploads/)

を追加しましょう。

releasesと同じ階層にあるsharedディレクトリからシンボリックリンクが貼られますので
gitとの管理とは分けて管理することが出来ます。
バックアップ等が必要でしたら他の方法でバックアップをとっておきましょう。

投稿2017/03/08 09:44

--KT--

総合スコア90

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問