gravのgitsync対応
これまでDropbox管理だったGravをGitHub対応にしてgit-syncのプラグインを使おうとしたらはまった。 一応なんとかなったと思うので,今後のためのメモ書き。
したかったこと
これまでGrav(CMS)のファイルはDropboxで同期してコンテンツ更新をして,最後にrsyncでwebサーバに反映していた。 Dropboxだと変なコンフリクトが起きることがあって微妙に嫌なことがあるのと,rsyncが面倒(コマンド一発だけど,いろいろな事情でwebサーバにアクセル出来る場所が限られる)。 Dropboxはやめて,すっきりとGitHub管理にして,git-syncのプラグインでwebサーバに自動反映しようとしたらはまった。
したこと
- gravのディレクトリ全体をGitHubで管理しようとレポジトリを作成。
- ローカルレポジトリをGitHubに反映し,webサーバ上で
git cloneを実行してダウンロード - webサーバ上で,git-syncのプラグインを導入して設定。
- admin パネルを導入
- pluginメニューで設定。表示の通りやれば設定は簡単。GitHubで2FAを使っていてもaccess tokenで設定できるように誘導してくれる。
- 一通り設定した後,GitHubに反映させようと
git pushを実行
困ったこと
- ローカルレポジトリで
git pullをした後,動作確認のためコンテンツ(user/pages/以下)をいじってgit pushするが,サーバファイルに自動反映されない。 - webサーバサーバ上で
git pullしても,やはりダメ。user/pages/以下のファイルは更新されているので,ますます意味がわからず悩む。
原因
なぜかローカルレポジトリを見ていたら,user/pages/に配置されているディレクトリpagesが,トップディレクトリにもできている。ただし,こちらには上記の変更が反映されていない。
これで,git-syncプラグインはpagesコンテンツのみをレポジトリ登録することが判明。つまり,gravツリー全体を管理するように作ったレポジトリに,さらにgit-syncプラグインがpagesのみをそこに登録(user/をトップディレクトリとして,pages以外は無視して登録)して,わけのわからん状態になっていた。
解決方法
素直に,gravツリーとpages以下を,別のレポジトリに分けることにした。
- gravツリーのレポジトリを作る(
pages以下は削除したもの。レポジトリgravとする).gitignoreには以下を追加user/pages
pagesコンテンツ用の空のリポジトリ(grav-pagesとする)もGitHubに準備- webサーバ上ではレポジトリ
gravをダウンロードしたものにpagesコンテンツを加えた,ツリー完成版を作る。 ここでgit-syncプラグインの設定して,レポジトリgrav-pagesを登録 - 管理用パソコンで,
git clone <grav-pagesのレポジトリ>をして,コンテンツが登録されていることを確認。 gravレポジトリのusr/以下から,上記<grav-pagesレポジトリ>/pagesへのシンボリックリンクを作る
感想
- 手元でコンテンツを更新して
git pushをしたらすぐにwebページに反映される。なんか気持ちいい。バックアップをとる心配もなくなって満足。
残った問題と解決方法
- gravツリーのwebサーバへの反映は自動では出来ない。これは頻度も少ないのでwebサーバ上で
git pullすることにする。
おまけ
こんなことで延々と時間を潰して何やってんだか。。。 GitHubの webhookのしくみとか,access token のこと等いろいろとわかったこともあったので,そこそこに収穫もあったけどね。