IMPOV::In My Point Of View

仕事、SEO、ウェブマーケティング、時事問題、健康、生き方などなど、書きたいことを勝手に書き倒しているブログです。とどのつまり「便所の落書き」

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 とかでてるだけで親ディレクトリのせいだとはわかんないし。

やっぱね、基本が大切。

まったく、最悪の土日でした。

*1:行末の改行コードCRLFのせいでシェバンをちゃんと読めず、-wオプションが付いたおかげで読めるようになった、ということだったと遠い記憶では理解しております。

*2:新しいグループを作成し/usr/local/rbenvディレクトリの全権限を割当て。Rubyを使うユーザーをこのグループに追加。