バリューサーバーでMovabletypeのrebuild-pagesを動かす

速くて安いサーバーないかな~なんてネットで検索してたらレンタルサーバーの比較をしているページ(http://rs-hikaku.com/)を見つけました。

速くて安いのなら乗り換えようかとバリューサーバー(ValueServer)の10日間のお試しで使ってみた。けどヘテムル(heteml)で動いていたものが動かない...。

cronに登録してMovabletypeの再構築をrebuild-pagesで自動的に毎日行っているのですが、以前の記事で書いた内容でヘテムル(heteml)では動いていたのにバリューサーバー(ValueServer)では動かない。

でも動かないままあきらめるのも嫌なので動くまでやってやろうと以下の事を追加で行い動かすことができました。

SSHでrebuild-pagesを実行したらエラー

まず動かない原因を探るためTera Termをインストールして、バリューサーバー(ValueServer)のサーバーにSSHでログインし、rebuild-pagesを実行してみます。

/usr/bin/perl /virtual/user-dir/public_html/mt/tools/rebuild-pages

rebuild-pagesを実行してみたところ

BEGIN failed--compilation aborted at /virtual/user-dir/public_html/mt/tools/rebuild-pages line 14.

というエラー。どうやらcronの設定が悪いのではなく、スクリプトでエラーが出ているようです。

/mt/tools/にあるrebuiled-pagesを開いて14行目を見ると「use Web::Scraper;」とありました。PerlモジュールのWeb::Scraperで引っ掛かっているようで、どのフォルダーを探してもWeb::Scraperが見当たらないのでエラーとなっているようです。

Web::Scraperを入れる

PerlモジュールのWeb::Scraperをどうやって入手すればいいのかわからなかったのですが、以下のサイトを参考にSSHでbinというディレクトリを作ってWeb::ScraperをインストールするためのcpanmWeb::Scraperに必要なHTML::TreeBuilder::XPathをそれぞれインストールしました。

cpanmを/virtual/user-dir/binにインストール

% cd /virtual/user-dir
% mkdir bin
% cd bin
% curl -LO http://xrl.us/cpanm
% chmod +x cpanm

Web::ScraperとHTML::TreeBuilder::XPathを/virtual/user-dir/binにインストール

% cd /virtual/user-dir
% cpanm -l bin Web::Scraper
% cpanm -l bin HTML::TreeBuilder::XPath

これで、/virtual/user-dir/bin/lib/perl5/Web/Scraperができあがりました。

rebuiled-pagesにパスを追加

rebuiled-pagesの8行目あたりにPerlモジュールの参照先を指定する部分があります。ここにはWeb::Scraperのある場(/virtual/user-dir/bin/lib/perl5)が指定されていませんので追加します。

#編集前
use lib ("$FindBin::Bin/../lib", "$FindBin::Bin/../extlib");
#編集後 use lib ("$FindBin::Bin/../lib", "$FindBin::Bin/../extlib", "/virtual/user-dir/bin/lib/perl5");
LWP::UserAgent::Localのあるディレクトリ(/mt/lib/)または/mt/extlib/にWeb::Scraperをインストールしておけば、これは不要だったかもしれませんがあまりSSHになれていないので、変なことにならないようここは参考通りにしておきます。

最後にlocal.pmのパスを修正

/virtual/user-dir/public_html/mt/lib/LWP/UserAgent/Local.pmの".$script_name""/virtual/user-dir/public_html/mt/$script_name"に修正します。

#88行目あたり
#修正前
my $pid = open2( \*RESPONSE, \*REQUEST, "./$script_name" ) #修正後 my $pid = open2( \*RESPONSE, \*REQUEST, "/virtual/user-dir/public_html/mt/$script_name" )
#94行目あたり
#修正前
open RESPONSE, "./$script_name|" or die "Couldn't spawn $script_name";

#修正後
open RESPONSE, "/virtual/user-dir/public_html/mt/$script_name|" or die "Couldn't spawn $script_name";

できた!

それぞれ修正したファイルをアップロードして、パーミッションも700にして、再度SSHで

/usr/bin/perl /virtual/user-dir/public_html/mt/tools/rebuild-pages

と打ってrebuiled-pagesを実行したらキター!!

ってことで一件落着。

【追記】これでcronもうまくいくはずだったのですが、うまくいかず以下のページで解決。