読者です 読者をやめる 読者になる 読者になる

RailsアプリをさくらVPS上のpassengerを使って本番環境で動かす(2)

備忘録 サーバー rails 開発

状況

さくらVPS上のapacheで独自ドメイン(http://example.com)のWebサイトを運営しており、その下にぶら下げる形で(http://example.com/hogerails)Railsアプリを動かしたい。
Railsアプリはローカルで作成し、rails serverでは起動する状態。

やったこと

  1. Ruby1.9.3のインストール
  2. Rails3.2.13のインストール
  3. passengerのインストール <--- 前回まで
  4. ローカルからサーバーにRailsアプリをアップロードし、設置 <--- ここから
  5. apacheのルーティング等の設定( /etc/httpd/conf/httpd.conf )
  6. passengerの設定( /etc/httpd/conf.d/passenger.conf )
  7. Railsの設定
  8. bootstrapのiconのための設定 <--- ここまで

Railsアプリの設置

公開するにあたり、Railsアプリをサーバーの然るべき場所に設置します。

アップロード

適当にsftpとか使ってフォルダごとアップロードします。

tar zcvf railsapp.tar.gz railsapp
|<
とかして圧縮するといいでしょう。
***設置
既にWebページを独自ドメインで運営している状況なので、/etc/httpd/conf/httpd.confを見て、そのDocumentRootを調べます。
ここでは
>||
/var/www/example/public_html

だとします。
アップロードしたrailsappを

mv railsapp /var/www/example/public_html/

します。

http://example.com/hogerailsというURLで、Railsアプリであるrailsappを指定するためにシンボリックリンクを設定します。

cd /var/www/example/public_html
ln -s railsapp/public hogerails

rails/appのpublicフォルダのシンボリックリンクを設置してください。
これで終わりです。

Apacheの設定

passenger-install-apache2-module

した時のメッセージにあったようにhttpd.confを弄ります。
ファイルの一番下の方だと思います。

NameVirtualHost *:80  # 行頭の"#"を消す
#  http://example.comの設定
<VirtualHost *:80>
	DocumentRoot /var/www/example/public_html
	ServerName example.com
	ServerAlias www.example.com
	<Dirctory "/var/www/example/public_html">
		Options ExecCGI FollowSymLinks -Indexes
		order deny, allow
		allow from ALL
		AllowOverride all
	</Directory>
</VirturalHost>

# その下に置くRailsアプリの設定
<VirtualHost *:80>
	DocumentRoot /var/www/example/public_html
	ServerName example.com
	ServerAlias www.example.com
	RailsBaseURI /hogerails  # 重要
	<Dirctory "/var/www/example/public_html/railsapp/public">
		order deny, allow
		allow from ALL
		AllowOverride all
	</Directory>
</VirturalHost>

ApacheのVirtualHostを利用し、同じServerNameにRailsBaseURIを指定します。
これでhttpd.confの設定は終わりです。

Passengerの設定

passenger-install-apache2-module

をした後に更新した/etc/httpd/conf.d/passenger.confに

PassengerMaxPoolSize 3  # インスタンス最大数
RailsEnv production  # 本番環境
RailsBaseURI /hogerails

を書き足します。
開発環境でとりあえず試したいといった場合には

RailsEnv development

とすれば出来ます。

Railsの設定

とりあえずGemfileに

gem "therubyracer"  # javascriptを動かすのに必要なはず

を書き加えて

bundle install --path vendor/bundle
rake db:migrate
rake assets:precompile

これで必要なgemのインストールとCSSファイルやJavaScriptファイルを圧縮とDBの作成を行います。
DBについてはconfig/database.ymlを自分の環境に合わせて設定してください。
config/enviroments/production.rbの各項目についてはわかってないので、ここでは言及しません。

ここまでで

とりあえず動くはずです。

sudo service httpd restart

してアクセスして確認しましょう。

sudo passenger-status

Railsアプリの状態を確認できます。

bootstrapのiconのためのassetsについて

bootstrapの利用

bootstrapのテーマを変更するのに便利なbootswatchの利用はbootswatchをRailsで使うを参考にしました。

iconが表示されない
<i class="icon-ok"></i>

とかでいい感じのアイコンを表示出来るのですが、アイコンの場所の指定が合っておらず、アイコンが表示されない問題があります。
これは

app/assets/stylesheets/bootstrap_and_overrides.css.less

// @fontAwesomeEotPath: asset-path("fontawesome-webfont.eot");
// @fontAwesomeEotPath_iefix: asset-path("fontawesome-webfont.eot#iefix");
// @fontAwesomeWoffPath: asset-path("fontawesome-webfont.woff");
// @fontAwesomeTtfPath: asset-path("fontawesome-webfont.ttf");
// @fontAwesomeSvgPath: asset-path("fontawesome-webfont.svg");

@fontAwesomeEotPath: "fontawesome-webfont.eot";
@fontAwesomeEotPath_iefix: "fontawesome-webfont.eot#iefix";
@fontAwesomeWoffPath: "fontawesome-webfont.woff";
@fontAwesomeTtfPath: "fontawesome-webfont.ttf";
@fontAwesomeSvgPath: "fontawesome-webfont.svg";

このように変更すると直りました。

おわり

RailsアプリをさくらVPSのApacheで動かすための備忘録でした。