トップ画像イメージ

先輩エンジニアに学んだサーバーへのRails環境構築時の詰まるポイントとチェックポイント

今回は(実務で)初めてのRailsの本番環境構築に帯同し、お手伝いをしました。 ※筆者はプログラマーでありますが、会社的にはSEという扱いであり、今日は先輩に続 いて、見習いインフラエンジニアとしてサーバー環境構築のお手伝いをさせていただ きました。

タイトル通り、nokogiripgbundle installが通らなくて、非常に苦しんだのですが、先輩の華麗なるエラー潰しにより、予定通り作業を終わらせることができたので、記録しておきたいと思います。 (勿論緊張もしましたが、とても良い勉強になりましたし、何より楽しかったです⭐️)

bundle install が通らない、yumで必要なパッケージがインストールされないって時 には、このチェックポイントを見返すようにします!gemのBuilding native extensions.には要注意です!

今日は。

その際、プログラムのエラー解決とは違う、サーバー側の環境構築のポイントのよう なものを学べましたのでまとめておきたいと思います。

bundle installが通らねぇ!とか、yumで必要なパッケージが入らねぇ!

とかいうのは良くある話だと思います。 今回それらを解決する時に、覚えておきたいチェックポイントを実践を通して学べた ので、まとめておきたいと思います。

前提条件として、インターネットに接続できないサーバー環境にRails環境を構築し ています。

docer等のコンテナ技術や、vagrant等の仮想環境が当たり前の昨今、インターネット にもつながっていないサーバーに環境を構築?とか思うこともあるかもしれません が、筆者的にはあまり朽ちることのない基本的な技術を学ぶ貴重な機会でした。

今後、仮想技術・コンテナ技術がより便利になっていく世の中でも、基本的なOS周り の知識習得に役立ちましたので、ぜひ一度本番環境を一から構築することをお勧めし ます。

当たり前だけどOSのバージョン等は確認しよう

開発側の仮想環境では、入ったパッケージがいまいちインストールされない・・・

こんな感じで

yum localinstall RPMのパス

パッケージAをインストールしました
パッケージBをインストールしました
パッケージCはパッケージ依存関係に問題があるため、飛ばします
パッケージDはパッケージ依存関係に問題があるため、飛ばします
パッケージEはパッケージ依存関係に問題があるため、飛ばします
パッケージFはパッケージ依存関係に問題があるため、飛ばします
・・・

みたいにあらかじめRPM群を用意していたのに、想定したとおりにパッケージがイン ストールされない・・・

みたいな時には、(当たり前ですが)まず

  • OSのバージョン
  • linuxならインストールの方法
  • 最小構成のインストールか?GUIでインストールされているか?

等は確認しておきましょう。

バージョンが同じでも、 標準構成でインストールか、最小構成のインストールか、はたまたGUI環境で Linuxをインストールしているかというところは、押さえておきましょう。

centosインストールイメージ画像

↑はCentOs7インストール時の画面のイメージです。

ここで、最小限のインストールをしているか、標準構成でインストールしているか で、初期に入っているパッケージ群が全く異なります。

また、同様にCUIか、GUIかでインストールされているパッケージが異なるので、当た り前ですが注意が必要です。

gemがbundle installで入らない時(local online問わず)

Railsのgem群がbundle installで入らないというのはよくあるお話です。

そんな時にも、あらかじめOS側に必要なパッケージがインストールされているか確認 が必要です。

例えば、 gem pgがインストールされない・・・ postgresqlpostgresql-serberpostgresql-libsも入っているし、ちゃんと initdbpsqlも動作するのに・・・

みたいな時。

プログラムの経験がある方は、エラーが出たときには、 下から上にエラーログをチェックする習慣が身についていたりすると思うのですが、 bundleryumを使ったパッケージやライブラリのインストール失敗時には、 上から下にエラーログをチェックするという発想も大事みたいです。

↑のpgの例で言えば、エラーログの↑の方を見てみると、

$ gem install pg
Building native extensions.  This could take a while...
#↑こいつ要注意
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.
    /home/imanau/.rbenv/versions/2.1.1/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /usr/bin/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
#↑ん?
*** extconf.rb failed ***

このgem install時のwith native extensionsは要注意です。

このメッセージは、「yum等でインストールできるライブラリに依存して、gemをインストールするよ!」というメッセージであるようで。

つまり、このgemでインストール失敗するということは、必要なライブラリをインストールできていなかったり、ライブラリの必要な設定ファイル等を読み込めていないということが考えられるようです。

この場合、 必要なライブラリがインストールできていないのかな? とか怪しんでみていると、 Can't find the 'libpq-fe.h headerとかいうメッセージがありますので、

ググってみると、postgresql-develとかいうライブラリが足りていないことが分かり、yumでインストールすると解決しました。

他にも、よくあるのがgem nokogiriがインストールできねぇ!とかいうのも良く聞 く話題です。

そんな時にも上から下にエラーメッセージを眺めていると


nokogiriをインストールしますよ! →依存性解決のため、まずはwebsokect-driverを入れますよ! →websokect-driverをインストールするときに、makeコマンドに失敗しました。

とかエラーが出るため、眺めてみると、

gcc command not foundとかエラーが出ていました。


まさかの、yum install gccが漏れているとかいうことが分かったりします。

まとめ

  • 本番サーバーのOSの種類・バージョンは確実に確認しましょう
  • bundle installが通らない時には、エラーメッセージを上から下にチェック。 どの順番で作業を実施し、どの段階でインストールに失敗しているのか要チェック
    • gem install 時のBuilding native extensions.は要注意!インストールがうまくいかなければ、yumとかで必要なパッケージのインストールが漏れているかも

以上、当たり前のことかもしれませんが、プログラムをメインでやっている方には、 案外見落としがちなことかと思いますので、誰かの参考になればと思います。