Just do IT

思うは招く

Linuxサーバー上でRailsアプリ(production環境)を立ち上げる

やりたいこと

  • さくらVPS上にインストールしたDebianRailsアプリを構築
  • production環境で動かす
  • ローカルではDBはsqlite3だったが、PostgreSQLに変更

環境

手順

VSCodeLinuxサーバー上のファイルを編集

VSCodeLinux上のファイルをいじりたいので以下の方法でリモートマシンにアクセスする。

k-koh.hatenablog.com

Railsアプリを用意する

適当にrails newしてRailsアプリをつくるか、GitHubからクローンしてくる。

クローンしてきたらbundle installしておく。

bundle install

sqlite3をPostgreSQLに変更

今回、私はGitHubから自分のアプリをクローンする方法をとった。 その時点のDBはsqlite3だったが、このタイミングでPostgreSQLに変更する。

DebianPostgreSQLをインストールする方法はこちら。

k-koh.hatenablog.com

Gemfileに以下を追加。

# 追加(sqlite3は削除してもいい)
gem "pg"

そしてインストール。

bundle install

config/database.ymlを編集する。

default: &default
  # postgresqlに変更
  adapter: postgresql 
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000
  # 追加
  username: ユーザーネーム
  password: パスワード

# database名を アプリ名_development
development:
  <<: *default
  database: rails_lesson_development

# database名を アプリ名_test
test:
  <<: *default
  database: rails_lesson_test

# database名を アプリ名_production
production:
  <<: *default
  database: ails_lesson_production

ユーザーネームとパスワードは、PostgreSQLでユーザーをつくったときのものを設定する。

k-koh.hatenablog.com

本番環境用にDBをcreateし、migrateする。

RAILS_ENV=production bin/rails db:create db:migrate

master.key を確認

Linux上で普通にrails newしてアプリをつくった場合、master.keyは生成される。しかし、今回のようにGitHubからクローンしてきた場合は存在しない。(.gitignoreで省かれてるため)

よって自分で用意する。

touch config/master.key

上記ファイルに、もともとのmaster.keyに書いてあるkeyをコピペする。(ただし、この方法がベストプラクティスなのか自信がないので後から書き換えるかも)

プリコンパイル

config/environments/production.rb を修正。 これを変更しないとプリコンパイルができなかったり、CSSが効かなかったり。

# config.assets.compile = false
config.assets.compile = true # trueに変更

プリコンパイルする。

bin/rails assets:precompile RAILS_ENV=production

サーバーを動かす

さくらVPSにターミナルからSSHアクセスする要領で、IPアドレスを指定して本番環境用のサーバーを立ち上げる。

bin/rails s --environment=production -b IPアドレス 

# 省略形
bin/rails s -e production -b IPアドレス 

サーバーが立ち上がったら、ページにアクセスする。

# アクセス先
http://IPアドレス:3000/

これでいけるはず。動かなかったらツイッターまでお気軽にご質問ください〜。

参考