備忘録を兼ねてメモ。 Gitのサブディレクトリ以下とは、例えばこんな構成です。 通常であればRailsアプリがGitリポジトリ直下にありますが、 複数のRailsアプリがあるなどしてデプロイしたいアプリがGitリポジトリのサブディレクトリ以下にある場合です。
repogitory/
├── user # エンドユーザー向けのRailsアプリケーション
├── admin # 管理者向けRailsアプリケーション
├── core # Modelなど各アプリから参照されるRailsエンジン
Gitリポジトリ直下にアプリがある場合は、言わずもがなCapistranoで簡単にデプロイできますよね。 けど、今回のようなケースですと一工夫してやる必要があります。 stackoverflowに解決案がありました。
Strategyの追加
require 'capistrano/recipes/deploy/strategy/remote_cache'
class Capistrano::Deploy::Strategy::RemoteCacheSubdir < Capistrano::Deploy::Strategy::RemoteCache
private
def repository_cache_subdir
if configuration[:deploy_subdir]
File.join repository_cache, configuration[:deploy_subdir]
else
repository_cache
end
end
def copy_repository_cache
if copy_exclude.empty?
run "cp -RpL #{repository_cache_subdir} #{configuration[:release_path]} && #{mark}"
else
exclusions = copy_exclude.map { |e| "--exclude="#{e}"" }.join(' ')
run "rsync -lrpt #{exclusions} #{repository_cache_subdir}/* #{configuration[:release_path]} && #{mark}"
end
end
end
deploy.rbの設定
require './lib/deploy/strategy/remote_cache_subdir'
set :strategy, Capistrano::Deploy::Strategy::RemoteCacheSubdir.new(self)
set :deploy_subdir, -> 'admin'