Web制作メモ -トップへ-

[さくらのVPS設定(3/3)] Passengerの設定,DB作成,Rails動作確認

Ruby2016.01.20 15:58

今回はRailsをサブディレクトリで動かすため、Passengerをインストールします。

静的ファイルやPHPは「/sakura/html」に、Railsは「/sakura/app」と住み分けします。

Passengerのインストール

Passengerをインストールします。

# gem install passenger

インストールに必要なモジュールを事前にインストール

# yum install -y libcurl-devel
# yum install -y httpd-devel
# yum install -y apr-devel
# yum install -y apr-util-devel

Apacheと連携する。対話形式になっていますが、通常Enter連打でOKです。

# passenger-install-apache2-module

画面に以下のようなメッセージが表示されます。
Apacheの設定ファイルに下記の内容を設定するので真ん中の5行をコピーしておきます。

---------------------------------------------------
Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /opt/rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/passenger-5.0.23/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /opt/rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/passenger-5.0.23
     PassengerDefaultRuby /opt/rbenv/versions/2.2.1/bin/ruby
   </IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!
---------------------------------------------------

Apacheの設定ファイルに先ほどの内容をペーストします。

# vi /etc/httpd/conf/httpd.conf
---------------------------------------------------
最終行に追加します。
LoadModule passenger_module /opt/rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/passenger-5.0.23/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
    PassengerRoot /opt/rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/passenger-5.0.23
    PassengerDefaultRuby /opt/rbenv/versions/2.2.1/bin/ruby
</IfModule>
---------------------------------------------------

ApacheがRailsにアクセスする際のユーザーを変更する

# vi /etc/httpd/conf/httpd.conf
---------------------------------------------------
以下の設定値を探して、
User apache
Group apache

以下の値に変更する
User XXXX(作業用ユーザーにしておく)
Group XXXX(作業用ユーザーにしておく)
---------------------------------------------------

下記のファイルも変更する。

# vi /etc/httpd/conf.d/httpd-sakura.conf
---------------------------------------------------
<VirtualHost *:80>
  ServerName XXXX.vs.sakura.ne.jp
  ErrorLog logs/sakura_error_log
  CustomLog logs/sakura_access_log combined env=!no_log

  DocumentRoot /sakura/html
  RailsEnv development

  <Directory /sakura/html>
    PassengerEnabled off
    AllowOverride None
    Options FollowSymLinks
  </Directory>

  <Directory /sakura/html/app>
    PassengerEnabled on
    RailsBaseURI /app
    AllowOverride all
    Options -MultiViews
    Options -Indexes FollowSymLinks
  </Directory>

</VirtualHost>
---------------------------------------------------

再起動して設定を有効にします。

# service httpd restart

データベースの作成

データベースにログインします。

# mysql -u root -p

データベースを作成します。

mysql> create database SYSTEM_DB character set utf8;

使用するユーザーを作成します。

mysql> grant select, insert, update, delete on SYSTEM_DB.* to SYSTEM_USER@localhost identified by 'パスワードを入力';

設定を反映します。

mysql> flush privileges;

ユーザー設定を確認します。

mysql> show grants for SYSTEM_USER@localhost;

一旦抜けます。

mysql> quit

作成したユーザーでログインしてみます。

$ mysql -u SYSTEM_USER -p

作成したデータベースも確認します。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| SYSTEM_DB          |
+--------------------+

Railsアプリケーションの作成

※ここから一般ユーザーで作業します。

アプリケーション用のディレクトリを作成する

$ mkdir /rails

アプリケーションを作成する

$ rails _4.2.1_ new app -d mysql --skip-bundle
※-d mysqlを付けないとSQLiteになる。

タイムゾーンの設定

$ vi /rails/app/config/application.rb 
---------------------------------------------------
以下の設定値を探して、

# config.time_zone = 'Central Time (US & Canada)'
以下の値に変更する
config.time_zone = 'Tokyo'
---------------------------------------------------

データベースの設定

$ vi /sakura/app/config/database.yml
---------------------------------------------------
「development:」に以下を設定する
database: SYSTEM_DB
username: SYSTEM_USER
password: (設定したパスワード)
host: localhost
---------------------------------------------------

アプリケーションのディレクトリに移動する

$ cd /sakura/app

足りないモジュールがあればこれでインストールされる

$ bundle install

色々インストールされていたが、こんなエラーが発生

mysql.h is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.
...
An error occurred while installing mysql2 (0.4.2), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.4.2'` succeeds before bundling.

言われた通りにインストールする

$ sudo yum install mysql-devel
$ gem install mysql2 -v '0.4.2'

nodejsもインストールしておきます。

# yum install nodejs

再度実行します。次は問題なし。

$ bundle install

Apacheの公開ディレクトリに移動する

$ cd /sakura/html

アプリケーションのディレクトリへのリンクを貼る

$ ln -s /sakura/app/public/ app

再起動して有効化

$ sudo service httpd restart

動作確認(一部不安定?)

最後に動作確認をして終了です。

実際にブラウザでアクセスして動作を確認してみます。

http://XXXX.vs.sakura.ne.jp/ → 静的ページの表示OK
http://XXXX.vs.sakura.ne.jp/app → Railsの初期ページの表示OK

しかし、Railsの初期ページの「About your application’s environment」のリンクをクリックすると、「Not found」になります。
URLを見ると、Railsのディレクトリ「/app」が抜けており、「/app」を追加してアクセスすれば表示されます。
ググるとこのトラブルは多いみたいで、PassengerがRailsのサブディレクトリのパスをRailsへ渡せていないようです。
バグか設定かよく分からなかったので、一旦このままで良しとします。

Passengerが原因ということを確認する為、WEBrickで確認してみました。

WEBRickを初期ポート3000番で起動します。

$ cd /sakura/app
$ rails s -b 0.0.0.0

ブラウザでアクセスしてみます。無事表示されました。
※ポートが異なるのでApacheと同時起動できます。

http://XXXX.vs.sakura.ne.jp:3000
→ Railsの初期ページの表示OK(About your application’s environmentのリンクもOK)

※iptableで3000番ポートを開けておかないとタイムエラーになります。