Wの悲劇・Rの憂鬱 - 連続でハマったトラブルの愚痴
タイトルがアレな感じですが、夏樹静子とかエラリー・クイーンは一切関係ございません、すいません。
古すぎて何を言っているのかわかんなかった方、申し訳ない。
ラノベとかアニメの話でもありません。そちら方面の方ゴメンナサイ。
Perl と Ruby on Rails のかなーり初歩の部分で2日連続でハマったお話です。
気付いてないからハマってるんです
原因は、何てこと無い「アタリマエ」の話なんです。
でも、イロハのイでも、ドレミのドでも、初歩の初歩でも、教科書の1ページ目でも、憲法前文でも、とにかく忘れちゃってたらハマるんですよねぇ。
しかも、初歩的な問題であればあるほど、原因が見つからずどんどん深くハマっていってしまうパターンです。
Wの悲劇
ちょいと訳あってPerlで簡単なスクリプトを書くことになりまして、作業自体は5分とかからずに終わったんですが、動かないんです。
500エラー。
あまりに簡単なスクリプトなのでバグりようが無いんです。なんせ、5行ぐらいしか無いですもの。
今どきなんですが、SSIの実装を検討するかという部分がありまして、仕方なく10年ぶりぐらいのPerlなんです。
こいつが、どうやっても動かないんです。
500! 500! 500!
1時間ほどして、かなーり昔の記憶が蘇りました。
魔法のオプション “-w”
というわけで、シェバンに"-w"を追記。
#!/usr/bin/perl -w
動きました。
「動かないときは、-w 付けると動く場合がある!」という遠い彼方の記憶がふと蘇ったのです。
当然のように「なんで -w 付けると動くんだ?」という疑問が湧いてまいりますと、「-w 付けただけで動くのなら改行コードが原因」と、あっという間に自己解決。*1
このなんとも情けない原因にたどり着くまで1時間!
というわけで、エディタで改行コードをCRLFからLFに変更。-wオプション無しでも動くことを確認致しました。
やっぱね、ちゃんとエディタ使ってFTPソフトで上げないとダメですよ。横着して、Dreamweaverで書いてさっくりプットとかするからこんな事になるんです。これだからWindowsはもうね・・・。
Rの憂鬱
Perlのトラブルと並行して発生していたもう一つのトラブルが、Ruby on Rail のサーバー設定問題。
ユーザーのディレクトリにテスト作成した Railsプロジェクトがどうやっても 403 Forbidden となってしまいブラウザ表示できないのです。
環境は、CentOS 7.3, Apache 2.4.6, MariaDB 5.5.52。CentOS 7の基本パッケージを yum で最新版に update した状態。
ここに、Rbenv, Bundler, Ruby, Rails, Passengerをインストールしてみようという試みです。
Rbenv, Bundler, Ruby本体については、/usr/local 以下にグローバルインストル。Passenger も root でインストール。
Rails などの gem は、作業用ユーザーのローカル(/home/[user name]/)で Bundle installという構成です。
作業用ユーザーでグローバルインストールしたBundlerを使えるようにするところまでは上手く行ったのですが*2、ローカルで rails new したプロジェクトをブラウザで見ることができないのです。
403! 403! 403!
何をやっても、403!
プロジェクトのディレクトリも配下のpublicディレクトリも、パーミッションは755にしてあるのに、403 なんです。
いろいろインストールし直したり、設定をいじりまくったり、ありとあらゆる考えられることをしてみたんですが、ダメ。
土日全部使いました。まるっと2日間!
もう諦めようかと思ったときに、閃きました。
そうだ、/usr/localにプロジェクトを置いてみよう!
というわけで、/usr/local配下に仮のディレクトリを作りプロジェクトを置き、Apacheの設定をこのディレクトリに変更したところ、ブラウザで表示されたんです!
「Yay! You’re on Rails!」って!
ここでようやく気づきました。原因がわかりました。
Rubyのせいでも、Railsのせいでも、Passengerのせいでもありません。
そう、/home/[user name] ディレクトリ自体のパーミッションが、700だったんです。
# ls -l /home total 4 drwx------ 9 hoge hoge 4096 Mar 12 22:51 hoge drwx------ 5 fuga fuga 117 Mar 8 18:11 fuga
リスト表示してみると、自分以外に"r"がついてない!
ユーザーディレクトリ配下で必死にパーミッションをいじっていても、ユーザーディレクトリ自体が700だったせいで、read できなかったようなんです。
# chmod 755 /home/hoge # ls -l /home total 4 drwxr-xr-x 9 hoge hoge 4096 Mar 12 22:51 hoge drwx------ 5 fuga fuga 117 Mar 8 18:11 fuga
あわてて、755に権限を変更したところ、ちゃんと表示されましたよ。
Yay! You’re on Rails!って!
これ、かなり初歩的なミス。
こういうのって高確率で見逃すんですよね。新しく入れたものの設定とかに目が行きがちで。
ログ見たところで、permission denied とか、You don’t have permission とかでてるだけで親ディレクトリのせいだとはわかんないし。
やっぱね、基本が大切。
まったく、最悪の土日でした。