gravのgitsync対応

これまでDropbox管理だったGravGitHub対応にしてgit-syncのプラグインを使おうとしたらはまった。 一応なんとかなったと思うので,今後のためのメモ書き。

したかったこと

これまでGrav(CMS)のファイルはDropboxで同期してコンテンツ更新をして,最後にrsyncでwebサーバに反映していた。 Dropboxだと変なコンフリクトが起きることがあって微妙に嫌なことがあるのと,rsyncが面倒(コマンド一発だけど,いろいろな事情でwebサーバにアクセル出来る場所が限られる)。 Dropboxはやめて,すっきりとGitHub管理にして,git-syncのプラグインでwebサーバに自動反映しようとしたらはまった。

したこと

  1. gravのディレクトリ全体をGitHubで管理しようとレポジトリを作成。
  2. ローカルレポジトリをGitHubに反映し,webサーバ上でgit cloneを実行してダウンロード
  3. webサーバ上で,git-syncのプラグインを導入して設定。
    1. admin パネルを導入
    2. pluginメニューで設定。表示の通りやれば設定は簡単。GitHubで2FAを使っていてもaccess tokenで設定できるように誘導してくれる。
  4. 一通り設定した後,GitHubに反映させようとgit pushを実行

困ったこと

  1. ローカルレポジトリでgit pullをした後,動作確認のためコンテンツ(user/pages/以下)をいじってgit pushするが,サーバファイルに自動反映されない。
  2. webサーバサーバ上でgit pullしても,やはりダメ。user/pages/以下のファイルは更新されているので,ますます意味がわからず悩む。

原因

なぜかローカルレポジトリを見ていたら,user/pages/に配置されているディレクトリpagesが,トップディレクトリにもできている。ただし,こちらには上記の変更が反映されていない。 これで,git-syncプラグインはpagesコンテンツのみをレポジトリ登録することが判明。つまり,gravツリー全体を管理するように作ったレポジトリに,さらにgit-syncプラグインがpagesのみをそこに登録(user/をトップディレクトリとして,pages以外は無視して登録)して,わけのわからん状態になっていた。

解決方法

素直に,gravツリーとpages以下を,別のレポジトリに分けることにした。

  1. gravツリーのレポジトリを作る(pages以下は削除したもの。レポジトリgravとする)
    • .gitignoreには以下を追加
      user/pages
      
  2. pagesコンテンツ用の空のリポジトリ(grav-pagesとする)もGitHubに準備
  3. webサーバ上ではレポジトリgravをダウンロードしたものにpagesコンテンツを加えた,ツリー完成版を作る。 ここでgit-syncプラグインの設定して,レポジトリgrav-pagesを登録
  4. 管理用パソコンで,git clone <grav-pagesのレポジトリ>をして,コンテンツが登録されていることを確認。
  5. gravレポジトリのusr/以下から,上記<grav-pagesレポジトリ>/pagesへのシンボリックリンクを作る

感想

  • 手元でコンテンツを更新してgit pushをしたらすぐにwebページに反映される。なんか気持ちいい。バックアップをとる心配もなくなって満足。

残った問題と解決方法

  • gravツリーのwebサーバへの反映は自動では出来ない。これは頻度も少ないのでwebサーバ上でgit pullすることにする。

おまけ

こんなことで延々と時間を潰して何やってんだか。。。 GitHubの webhookのしくみとか,access token のこと等いろいろとわかったこともあったので,そこそこに収穫もあったけどね。