# CoreserverでtDiary構築メモ(2022/05/17)
## 発端
* 動作させてるレンタルサーバーCoreserverが[Rubyのバージョンアップほか色々メンテ](https://www.coreserver.jp/info/brandnew2022/)をした。
* メンテ以降、tDiaryの日記が動かなく(500 Internal Error)なった。
これに加えて最近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`する方法」に変更することに決める。
:::info
余談:
これまでずっとパッケージ展開の方法にしてたが、tDiaryを初めて導入したのは学生時代で、Rubyはさっぱり分からなかったため。あと当時はGitもGitHubもなかった。
しかし今はもうRubyがある程度分かるし、Gitも分かる。己の成長を感じる。
:::
### 導入2回目(成功)
気を取り直して、Gitをcloneしてくる方法で再挑戦。
* [CGI版の導入手順](https://github.com/tdiary/tdiary-core/blob/master/doc/INSTALL-cgi.md)を参照。
* `master` ブランチを `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.
(後略)
```
* 要するにパッケージのバージョン不一致が原因。
* 参考記事:[gem で json 2\.1 と json 1\.8 が競合して困った \- yet another pudding](https://yapud.hatenablog.com/entry/2018/11/29/000000)
* Coreserver特有なのかなあという気がするが、とりあえずGemfileを書き換えることにする。Gemfile末尾に以下を追記
* 追記じゃなく `Gemfile.local` を作るほうがいいかもしれない。
```ruby:
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` に再度追記。
```ruby:
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` プラグインが怒られている(怒っている)ことが分かった。まあエラーメッセージの通りなのだが。
* 参考記事:[tDiaryをバージョンアップした \| Days of speed](https://www.nofuture.tv/20130103)
* 原因として考えられるのは「`Gemfile`のバージョンを弄ったから」か「環境が合わない」か「プラグインがバグってる」かの、いずれか。
* とはいえ調査するのも面倒なので、問題の `recent_rss.rb` を一旦リネームして避ける。どうせこのプラグイン使ってないし。
* `mv recent_rss.rb recent_rss.rb__` と力業。
* これでページを表示してみる……と**無事表示された!**
これはもう勝ち確ですありがとうございました(おタマさんボイス)。
### 残りの移植作業
* 自作のテーマを `theme` 配下へ、そのまま移植(コピー)
* 全体設定を一通り見直し → 特に何もしなかった
* RSSファイル(`index.rdf`)を旧バージョンのディレクトリからコピー
* [tdiary-contrib](https://github.com/tdiary/tdiary-contrib)関係の導入
* ~~GitHubに書いてあるとおりに `Gemfile.local` を作って追記。~~
* ~~`bundle install --without development` する。~~
* **↑この手順で導入されるものは古いのでNG!!** これに気付かず動かないことに悩んで数時間無駄になった……。
* 素直に[GitHubのtdiary-contrib](https://github.com/tdiary/tdiary-contrib)から、masterブランチのzipを `wget` して `unzip` する。
* 解凍した中から `plugin` フォルダの中で使うモノを選び、本体の `misc/plugin` へ放り込んでいく。
* 現状使ってるcontrib内プラグイン:
* `google_analytics.rb`
* `hatena_star.rb`
* `instagr.rb`
* `ogp.rb`
* `section_permalink.rb`
* `section_permalink_anchor.rb`
* 上記2つの導入経緯は以下の記事参照。
* [tDiaryの各個別記事のURLをアレするメモ(主に自分用) \- Zephyr Cradle Diary\(2014\-12\-09\)](https://www.zephyr-cradle.info/diary/20141209p01.html)
* `show_and_hide.rb`
* `socialbutton.rb`
* こちらは一手間かかる。以下記事参照。
* [tDiaryのソーシャルボタン系をJavaScript化してみた \- まちゅダイアリー](https://www.machu.jp/posts/20110613/p01/)
* 少なくとも現時点においても、この記事通りで動いた。ちゃんと最新版であることを確認する。
以上完了!
## 公式で気になる部分
今回公式のGitHubから初めてcloneしてきたが、リポジトリやドキュメントを真面目に見る色々気になるところがある……。
気が向いたらプルリク(提案)してみるのも良いかもしれない、などと思った。
* `.gitignore` が物足りない
* ignoreファイル自体はある。
* でも `.htaccess` とか `*.rdf` とか、良くあるこのあたりはあらかじめ書かれててもいいのでは……?
* パッケージに同梱されている `doc` フォルダの中にあるhtmlをブラウザで表示すると文字化けする
* UTF-8で書かれてるっぽいが、文字コード指定がない。
* のでChromeやEdgeで見ると文字化けする。読めない。
* 公式サイトにリンク切れが多い
* まあメンテが面倒なのは理解する……けど、ドキュメントの特にインストール手順( https://tdiary.org/doc/INSTALL.html )がリンク切れなのはちょっとアレかなと……。
* 現状では[GitHubのdocフォルダ](https://github.com/tdiary/tdiary-core/tree/master/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
```
おわり。