Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Rails アプリを GCE の Ruby Stack でデプロイする

More than 5 years have passed since last update.

環境

  • Apache 2.2.22
  • Passenger 4.0.48
  • Ruby 2.1.1p76
  • Rails 4.1.4
  • RVM 1.25.28
  • MySQL 5.5.38

Ruby development stack の準備

(参考)Ruby development stack on Google Compute Engine
(参考)Deploying a Rack-based Ruby application

GCEのRubyスタックを作成する。(パスワードなどは例ですので適宜変更してくださいね)

  • パスワード:mysqlrootpassword
  • ゾーン:asia-east1-a

手順

  • まず「プロジェクト/概要」ページ右下の「その他」をクリックする。

1.png

  • 次に表示されたページの「Deploy the Ruby Stack on Compute Engine」をクリックする。

2.png

  • パスワードを入力し「詳細」をクリックする。
  • お好みのゾーンを選びましょう。

3.png

  • 5〜10分待つとインスタンスが生成される。
  • 「View your Ruby stack in the Developers Console」をクリックする。

4.png

  • VM インスタンスのページに遷移する。
  • 「SSH」をクリックすると・・・

5.png

  • コマンドラインの文字列が表示される。

6.png

WEBrick

development環境

開発用にTCP 3000番のポートを通す。

gcloud compute firewall-rules list
gcloud compute firewall-rules create rails --allow tcp:3000

サーバーにログインする。

gcloud compute --project FOO ssh --zone "asia-east1-a" BAR

サンプルのRailsアプリとMySQLのテーブルを作成する。

  • therubyracer gemを有効にする。
  • パスワードを設定する。
mkdir webapps && cd webapps
rails new -B -d mysql blog && cd blog
sed -i -e "s/# gem 'therubyracer'/gem 'therubyracer'/" Gemfile
rvmsudo bundle
rails g scaffold Post title body:text
sed -i -e "s/password:$/password: mysqlrootpassword/" config/database.yml
rake db:create
rake db:migrate
rails s

ウェブブラウザで http://<<外部IP>>:3000/posts を開いて動作を確認する。

(参考)データベースの確認と削除
mysql -uroot -pmysqlrootpassword -e 'show databases;'

+--------------------+
| Database           |
+--------------------+
| information_schema |
| blog_development   |
| blog_test          |
| mysql              |
| performance_schema |
+--------------------+

mysql -uroot -pmysqlrootpassword -e "drop database blog_development;"
mysql -uroot -pmysqlrootpassword -e "drop database blog_production;"
mysql -uroot -pmysqlrootpassword -e "flush privileges;"

production環境

データベースを作成すると、MySQLのrootユーザーのパスワード入力を促される。

rake db:create RAILS_ENV=production
> mysqlrootpassword
rake db:migrate RAILS_ENV=production
(参考)ユーザーの確認と削除
mysql -uroot -pmysqlrootpassword -e "select Host, User from mysql.user;"

+-------------------------+------------------+
| Host                    | User             |
+-------------------------+------------------+
| 127.0.0.1               | root             |
| ::1                     | root             |
| localhost               | blog             |
| localhost               | debian-sys-maint |
| localhost               | root             |
| rubystackbox-cb293-grbj | root             |
+-------------------------+------------------+

mysql -uroot -pmysqlrootpassword -e "drop user blog@localhost;"
mysql -uroot -pmysqlrootpassword -e "flush privileges;"

production環境用にassetsをコンパイルして、config.serve_static_assetsをtrueに変更する。

rake assets:precompile RAILS_ENV=production
sed -i -e "s/config.serve_static_assets = false/config.serve_static_assets = true/" config/environments/production.rb
SECRET_KEY_BASE='secret' rails s -e production

Apache

Passenger

アプリを sub URI(/subapp)でデプロイする。
アプリ用の設定ファイルを作成する。

cd /etc/apache2/sites-available
ls -la
sudo cp default blog
sudo vi blog

環境変数 SECRET_KEY_BASE を設定する。
アプリのパスは適宜変更してください。echo $HOME/webapps/blog/public echo $HOME/webapps/blog

blog
<VirtualHost *:80>
    SetEnv SECRET_KEY_BASE secret
    Alias /subapp /home/usutani/webapps/blog/public
    <Location /subapp>
        PassengerBaseURI /subapp
        PassengerAppRoot /home/usutani/webapps/blog
    </Location>
    <Directory /home/usutani/webapps/blog/public>
        Allow from all
        Options -MultiViews
    </Directory>
</VirtualHost>

config.serve_static_assets を false(デフォルト値)に戻す。

cd ~/webapps/blog
sed -i -e "s/config.serve_static_assets = true/config.serve_static_assets = false/" config/environments/production.rb

設定ファイルを有効にする。

sudo a2dissite default
sudo a2ensite blog
sudo apache2ctl -t
sudo service apache2 reload

ウェブブラウザで http://<<外部IP>>/subapp/posts を開いて動作を確認する。

(参考)ログの確認
cd ~/webapps/blog 
tail -f log/production.log

assets に変更があるなら(ある度に)コンパイルする。
デプロイし直す。

(参考)再デプロイ
cd ~/webapps/blog
rake assets:precompile RAILS_ENV=production
touch tmp/restart.txt
usutani
好物は Ruby on Rails や iOS アプリの開発です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away