Try   HackMD

CoreserverでtDiary構築メモ(2022/05/17)

発端

これに加えて最近tDiaryのアップデートをちょっとサボっていたので、
良い機会なのでアップデートもした。そのメモ。

アプデ前は tDiary v5.0.x とかだった気がする。
執筆時点の最新は tDiary v5.2.1 。

環境

Coreserver(レンタルサーバー)
https://www.coreserver.jp/

やったこと

導入1回目(中断)

  • いつも通りにsshログイン。
  • フルセットパッケージ(tdiary-full-v5.2.1.tar.gz)を wget して解凍(tar xvf)。
  • コンフィグファイル(tdiary.conf)と .htaccess を、前バージョンの同ファイルを参照しながら移植。

いつもならこれだけで表示される!
……はずが、500 Internal Error。

以下エラーメッセージ(確かこんなの)。

You have already activated digest 3.0.0, but your Gemfile requires digest 3.1.0. Since digest is a default gem, you can either remove your dependency on it or try updating to a newer version of bundler that supports digest as a default gem. (Gem::LoadError)
(後略)

昔だったら投げてたが、今は知識が付いたので、これを見て Gemfile 関係だろうなーとは予想が付いた。

ただ、これまでtDiaryを使っている中で Gemfile を触ったり、ましてや bundle install をしたりしたこともなかったので、流石にこれまで通りの手順じゃダメかーとなった。
ちょっと本格的にこのあたりを実施する手順に変えるか……と思い立つ。

ここで手法を「.tar.gz 展開する方法」から「git cloneする方法」に変更することに決める。

余談:
これまでずっとパッケージ展開の方法にしてたが、tDiaryを初めて導入したのは学生時代で、Rubyはさっぱり分からなかったため。あと当時はGitもGitHubもなかった。
しかし今はもうRubyがある程度分かるし、Gitも分かる。己の成長を感じる。

導入2回目(成功)

気を取り直して、Gitをcloneしてくる方法で再挑戦。

git clone https://github.com/tdiary/tdiary-core.git tdiary
  • 1回目のときと同じように tdiary.conf.htaccess を移植。
  • bundle install --without development すると、なんかパスワード入力しろと言われる。
    • 要するに管理者権限のある共有領域へ依存パッケージをインストールしようとしたから怒られた感じ。レンタルサーバーだし、そりゃそうだ。
  • 警告文を読むと以下をしろとあったので、した。これで日記のディレクトリ配下に依存パッケージをインストールするようになる。
bundle config set path 'vendor/bundle'
  • もう一度気を取り直して bundle install --without development した。今度はコマンド成功。
  • ページを表示すると、相変わらず 500 Internal Error 。しかしエラーメッセージが変わっていた。
You have already activated json 2.5.1, but your Gemfile requires json 2.6.1.
(後略)
  • 要するにパッケージのバージョン不一致が原因。
  • Coreserver特有なのかなあという気がするが、とりあえずGemfileを書き換えることにする。Gemfile末尾に以下を追記
    • 追記じゃなく Gemfile.local を作るほうがいいかもしれない。
gem 'json', '=2.5.1'
  • 追記してから bundle update json する。コマンド成功。
  • 再度ページへアクセス。1回目に見たのと同じエラー。
You have already activated digest 3.0.0, but your Gemfile requires digest 3.1.0.
(後略)
  • なるほど同じ要領だな! ということで Gemfile に再度追記。
gem 'json', '=2.5.1'
gem 'digest', '=3.0.0'
  • 追記してから bundle update json する。コマンド成功。
  • 再度ページへアクセス。
  • しかし今度は新しいエラーメッセージ。
Plugin error in '50sp.rb'.
Plugin error in '/(略)/tdiary/misc/plugin/recent_rss.rb'.
cannot load such file -- rss/rss
(後略)

いやわからん……。

  • ぐぐったら以下の記事を見つける。要約すると recent_rss.rb プラグインが怒られている(怒っている)ことが分かった。まあエラーメッセージの通りなのだが。
  • 原因として考えられるのは「Gemfileのバージョンを弄ったから」か「環境が合わない」か「プラグインがバグってる」かの、いずれか。
  • とはいえ調査するのも面倒なので、問題の recent_rss.rb を一旦リネームして避ける。どうせこのプラグイン使ってないし。
    • mv recent_rss.rb recent_rss.rb__ と力業。
  • これでページを表示してみる……と無事表示された!

これはもう勝ち確ですありがとうございました(おタマさんボイス)。

残りの移植作業

  • 自作のテーマを theme 配下へ、そのまま移植(コピー)
  • 全体設定を一通り見直し → 特に何もしなかった
  • RSSファイル(index.rdf)を旧バージョンのディレクトリからコピー
  • tdiary-contrib関係の導入
    • GitHubに書いてあるとおりに Gemfile.local を作って追記。
    • bundle install --without development する。
    • ↑この手順で導入されるものは古いのでNG!! これに気付かず動かないことに悩んで数時間無駄になった……。
    • 素直にGitHubのtdiary-contribから、masterブランチのzipを wget して unzip する。
    • 解凍した中から plugin フォルダの中で使うモノを選び、本体の misc/plugin へ放り込んでいく。
  • 現状使ってるcontrib内プラグイン:

以上完了!

公式で気になる部分

今回公式のGitHubから初めてcloneしてきたが、リポジトリやドキュメントを真面目に見る色々気になるところがある……。
気が向いたらプルリク(提案)してみるのも良いかもしれない、などと思った。

  • .gitignore が物足りない

    • ignoreファイル自体はある。
    • でも .htaccess とか *.rdf とか、良くあるこのあたりはあらかじめ書かれててもいいのでは……?
  • パッケージに同梱されている doc フォルダの中にあるhtmlをブラウザで表示すると文字化けする

    • UTF-8で書かれてるっぽいが、文字コード指定がない。
    • のでChromeやEdgeで見ると文字化けする。読めない。
  • 公式サイトにリンク切れが多い

    • まあメンテが面倒なのは理解する……けど、ドキュメントの特にインストール手順( https://tdiary.org/doc/INSTALL.html )がリンク切れなのはちょっとアレかなと……。
    • 現状ではGitHubのdocフォルダが実質的な最新マニュアルっぽい? ここへのリンクにすればいいんじゃないかなと。
  • 書かれているコマンドが古かったり、古いモノが導入されてしまったりする

    • INSTALL-cgi.md に書かれてるコマンド bundle install --without development が古い。
      • 今はこんな感じの書き方っぽい↓
      • ​​​​​​​​​​  bundle config set path 'vendor/bundle'
        ​​​​​​​​​​  bundle config set --local without 'development'
        ​​​​​​​​​​  bundle install
        
    • contribの取得方法 gem 'tdiary-contrib' だとめっちゃ古いものが導入されてしまう
      • vendor以下を見たら tdiary-contrib-v4.2.0 というのが入ってきていた。たぶんバージョンが圧倒的に不一致状態になっている。
      • どうすればいいのか分からないけど少なくともこのままだとダメ。

アップデート時作業

何はともあれ↓

git fetch

このとき Gemfile.lock などに変更が発生している場合は、一旦元に戻す。

git checkout HEAD Gemfile.lock

その上で↓

git pull
bundle update

おわり。