14. サーバでの公開

14.1. Railsの動作環境(Environment)

Railsには動作環境として development と production がある(ほんとは test もあるけれど、それは省略)。

development

毎回コードを読み込んで実行するので、変更がすぐに反映される。

production

一度読み込んだコードはキャッシュするので、変更したらウェブサーバの再起動などが必要。その代わり速い。

14.1.1. 環境の指定

  • 環境変数 RAILS_ENV で指定する。

  • ウェブサーバから起動するプロセスについては、使うシステムによって指定方法が用意されている。例えばApache+Passengerの場合は、Apacheの設定ファイルの中に PassengerAppEnv ディレクティブを書く。

14.1.2. 環境による設定の切り替え

  • 初期設定は config/environments/development.rbconfig/environments/production.rb に書く。

  • データベースの設定は config/database.yml の中に環境ごとに区切って書く。

    • デフォルトでは開発環境も本番環境もsqlite3を使うが、データベースのファイルは db/development.sqlite3db/production.sqlite3 と別のものになっている。

    • 本番環境では扱うデータ量が多いので、PostgresqlやMySQLを使うことが多い。

14.2. gemのインストール

  • gemによってはnative extensionを含むものがあり、これはCPUやOSやライブラリに依存するので、一般には本番マシンでインストールし直さなければならない。

    • 最近は開発マシンも本番マシンもDockerを使って全く同じ環境にすることも多い。

14.3. セキュリティ

14.4. Renderへのデプロイ

14.4.1. Renderについて

Render はRailsホスティングサービスの一つ。

商用サービスであるが、ごく小さなアプリケーションなら無料アカウントで利用可能。ただし、データベースは90日経つと削除される。

14.4.2. GitHubについて

Renderは、GitHubまたはGitLabのリポジトリからデプロイするようになっているので、まずGitHub(またはGitLab)のリポジトリを作ることが必要。GitHubについてはググればいくらでも解説が見つかる(例えば次の資料)ので、そちらを参照。

14.4.3. デプロイの手順

概ねこの資料の通りで良いが、Railsのバージョンが6で、記述が少し古い。注意点は以下の通り。

  1. 「Gemfileの編集」で gem "pg", "~> 1.4" と書いてあるが、Renderのガイドにはバージョンの指定は書いていないので、 "~> 1.4" は不要。(たぶん書いてあっても問題はない)

  2. bundle install をDockerコンテナ内で行う場合は、 bundle lock --add-platform x86_64-linux は不要。(たぶん実行しても問題はない)

  3. 「Build Command」は次のようにする。

    bundle install; bundle exec rake assets:precompile; bundle exec rake assets:clean; bundle exec rake db:migrate; bundle exec rake db:seed
    

14.4.4. メール送信の設定

メールを送信する必要がある場合は、環境変数でメールサーバのログイン名とパスワードを設定する( 13.2.4 章 )。 Web Service を作成する時にやってもよいし、後で Dashboard の Environment でも設定できる。

Deviseでメールを送信するのはパスワード再発行のときだけなので、パスワード漏洩リスクが嫌な人は、設定しないのもアリ。

14.4.5. ファイルのアップロード

Active Storage によるファイルのアップロード( 11 章 )でサーバのディスクに保存するよう指定した場合、Renderでは実行イメージに保存されるので、とりあえずは動く。しかし、無料プランではアイドル状態が一定時間続くと実行イメージは消去されるので、次にアクセスしたときには画像が消えていることがある。

14.4.6. デプロイした例

https://sfc-script-lang.onrender.com/

最終課題

  • ソースコードはK-LMSの「最終課題(ソースコード)」に次のどちらかを提出。

    • Railsアプリケーションのディレクトリ(例題だったらschool)をzipまたはtar+gzipで圧縮してアップロード。

    • GitHubやGitLabに置いている人は、そのURLを提出。(private repository だと見えないので、publicであること)

  • レポートはK-LMSの「最終課題(レポート)」に提出。構成は次のような感じで。

    1. 最初にどのようなものを作ろうと思ったか、動機や目標や背景。

    2. できたアプリケーションの使い方の説明。

    3. アプリケーションの内部構造の説明。

    4. 思った通りのものができたか、何が難しかったか。

  • Renderや自宅サーバにデプロイした場合は加点するので、「最終課題(サーバ)」にURLを提出。

  • 1月19日の授業でデモをしたら、さらに加点するので、成績Sが欲しい人はがんばってください。

  • 締め切りは1月25日(木)。

注意:参考にした資料はレポートの最後に参考文献リストとして書くこと。公開されているソースコードや友達に教えてもらったコードをそのまま使った場合は、コメントとしてどこからコピーしたかを明記すること。出典を明記せずにコピペすると、不正行為としてその学期の単位がすべてDになることがある。