サーバを引っ越した。
平日にぼちぼちやるかと言ったものの、仕事がけっこう忙しくて平日はそんな暇がなかった。 幸い土曜は休めたので一気に移行した。
以前の家の退去が11月いっぱいだったんだけど全く何も連絡が来なくて困った。不動産屋に電話してみると大家に確認してもらって、不動産屋に鍵持ってきてっていう単純な話になった。大家さんから連絡することになってたんかね。これで引っ越しはとりあえず終わりか。部屋片付いてはいないものの。
今住んでるところは本屋があんまり無いことに気付いた。近くのヨーカドーの本屋に行ってみたらひどすぎて話にならん感じだった。ヨーカドーに入ってるどっかの本屋じゃなくてヨーカドー自体の本屋だしな……。まともそうな本屋は歩いて20分くらいかかりそうな場所でちょっときつい。会社の近くにそこそこの本屋はあるのがまだ救いか。
日曜はそんなわけで不動産屋に持っていってそれから仕事へ。忙しいんだよ。
Webサーバとして使ってたVPSが11月いっぱいで契約切れるので引っ越しである。
移行先はVPSにするかレンタルサーバ(共有Webサーバ)にするか考えたが、だいたいCGIで済むしレンタルサーバでいいやということにしたのであった。
さくらのレンタルサーバを試用してみたんだが、sshで入っていろいろビルドもできるのでこれで充分な感じあるな。
rubyが標準で1.8.7だが今時1.8では困る。2.1.5を落としてビルドしてみたら何の問題もなくインストールまでできた。当然インストール先は$HOME/localとかにしないと書き込めないが、指定したのはその程度だ。
tDiary入れるのにgemをgitから落としたりしなきゃいけないんじゃなかったっけ。そもそもtDiary自体がgitから落としてたんだった。さてどうしたものかと思ったらgitも最初から入ってた。なんだこのレンタルサーバ。
いざtDiaryを動かそうとしたらそこからがまた大変だった。 tDiaryをせっかくなので最新にしようとしたが、操作がわからん。 まあgitが分かってないだけなんですが、操作方法を調べつつなんとか最新に。 しかしこれがあとで仇となったわけなんだが。
bundlerでbundle installしてみるが、拡張ライブラリのビルド失敗する。あーrubyのインストール先が$HOME/localだけど、$HOME/local/includeとかにインクルードパス通ってないのか。rubyをconfigureする際にCPPFLAGSとLDFLAGSを設定するようにしてビルド・インストールしなおした。
次に失敗するのはtherubyracerのインストールだ。きたよこいつ!いっつもビルドできないやつ。なんでこんな大変なもの使っちゃうんだよもー。 libexecinfoてのが入ってなくてビルドできないっぽいんだけど、スタックトレース取るようなライブラリとのことでシステムのやつだな。こまったね。 いろいろ調べた結果、therubyracerが依存してるlibv8てのはバイナリを入れろってことになってるらしい。調べるとlibv8のちょっと古いバージョンにfreebsd-9用のがあった。このバージョン指定しよう。 ……あれ、ビルド失敗してる。バイナリ入れろよポンコツどもめ。何故だかわからんけど、rubyのバージョンを見るとfreebsd9.1になってるのが悪いんだろうか。9でも9.1でも同じだと思うんだけど、gemとかいうなんかアレなシステムはどうやってシステム判別してるのかよくわからんので強制インストールさせる方法がわからなかった。bundlerはplatformにWindowsとJRubyしか指定できないっていう明らかな片手落ちシステムだしな。
調べるとnode.jsを入れようとしてv8のビルドができなくて解決してるのがいくらか見つかった。レンタルサーバ上でports使えるようにしてlibexecinfoをportsから入れるってのでそんなんできるのかよすげーなって試そうとしたんだけど、pkg_addでも行けるらしい。バイナリで行けるならそれでいいや。 pkg_addで適当な場所に入れるとchownできねーとかでエラーが出まくるもののインストール自体はできた。portsの方が良かったのかな?まあ入ったからいいか。しかし相変わらずlibv8のビルドは失敗する。pkg_addで入れた$HOME/localなんかにインクルードパスとかが渡ってないようで、ほんとうに困ったもんだな!
結局はパッケージを探してたらv8っていうパッケージがあったのでこれ入れて、libv8はシステムのv8を使うようにして上手く通ってくれた。こんなんでいいのか。 therubyracer自体のビルドでもエラー出たが、v8のインストールディレクトリを指定してやって上手くインストールできた。動くかどうかはわからないが。
しかしなんでRubyのWebアプリ動かすのにサーバ側でJavaScriptのインタプリタ動かす必要あるんですかね!CoffeeScriptなんて変なもの使うなよ!せめて遅くてもいいからもっと簡単に入るJavaScriptインタプリタも用意してくれ!!
あとはtDiary自体だが、スタイル周りのコードが変わってて自作のスタイルが動かないのを直してなんとなく動くようになった。なにかが表示されてなくて空だけどなんだっけこれ。カテゴリ一覧がないのか。あとで作り直そう。
他に静的ページなところはそのままコピるだけ、fossilは普通にビルドできたのでぶちこんでパス調整しただけでできた。やったー。
日記のカテゴリが表示されてないので作り直そうと設定ページからやってみるといくら待っても終わらないし、それでも待ってると失敗してしまう。プロセスの動き見るとどっかで固まってるっぽいが? ファイルが壊れてるのかと消してみたりするけど一向に改善しないのでなんとかデバッグしてみると、つい最近入ったコードでデッドロックしちゃってる? category.rbでストレージのcategoryに対して書き込もうとしてトランザクション開始してるんだけど、その中深くでプラグインを読み込んでるところがあって、またcategory.rbが読み込まれる。category.rbは読み込まれた時にカテゴリキャッシュを取得しようとして、ストレージのcategoryに対してトランザクション開始する。ここでデッドロックってわけか。 書き込み用のトランザクションが範囲でかすぎるのでもうちょい細かくしてみたら通るようになった。 こうちょこっと書くとすぐ解決したみたいだけど、原因追い込むのに23時くらいから朝4時までやってたからな……。
どうもこのコードはつい最近入ったもののようだ。最新なんかにしちゃうのが悪かったか。 tDiaryのコードをいくらかいじってるから素の状態で起きるかわからんのだけど起きそうな気もするなぁ。 調べたいところだけど、素の状態を用意するのがちょっとめんどい……。
とにかくサーバの移転自体はなんとか間に合った。日記以外のサイトの方が古いコンテンツばっかりでビルド環境も無くなっちゃってるので新しくしたい気はあるけど、急ぎではないのでぼちぼちやっていこう。
VLCで上手く再生できてなかったのは本当にPCが遅かっただけのようだ。
Semaphoreをasyncで待つのが悪いかもしれんけどなんか上手い方法はないかと調べてみたらSemaphoreSlimだとWaitAsyncてのが標準であった。あーこれSemaphoreにもくださいよー。ということでSemaphoreSlimを使ってみたらVLCで上手く再生できるようになったやったー……? これ試してたのはタブレットの方なんだけど、タブレットで以前のSemaphore版動かしたらどうなんだろうとやってみると、何事もなくVLCで再生できてしまった。やっぱりたまにちょっと詰まるけど、SemaphoreSlimでは詰まりもしない。SemaphoreSlimにした方がちょっといいけどそこが大きな要因ではないようだ。
しかしCPU使用率見てたら重いな。なんかOBSから受け取ってVLCに流してるだけなのに60%とかCPU持ってく場合がある。重すぎでしょ。なんでだかわからんけど、やっぱり単に重いのが問題ぽいね。VLCを止めると5%そこそこまで下がるので送信に関わるあたりぽいけど。この辺直せれば上手く動くようになるかな。