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.rb
とconfig/environments/production.rb
に書く。データベースの設定は
config/database.yml
の中に環境ごとに区切って書く。デフォルトでは開発環境も本番環境もsqlite3を使うが、データベースのファイルは
db/development.sqlite3
とdb/production.sqlite3
と別のものになっている。本番環境では扱うデータ量が多いので、PostgresqlやMySQLを使うことが多い。
14.2. gemのインストール¶
gemによってはnative extensionを含むものがあり、これはCPUやOSやライブラリに依存するので、一般には本番マシンでインストールし直さなければならない。
最近は開発マシンも本番マシンもDockerを使って全く同じ環境にすることも多い。
14.3. セキュリティ¶
一般に公開する場合はセキュリティホールを作らないように注意。
CNSのサーバを使う場合は、CNSの規則も守ること。
参考資料: SFC-CNS利用内規
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で、記述が少し古い。注意点は以下の通り。
「Gemfileの編集」で
gem "pg", "~> 1.4"
と書いてあるが、Renderのガイドにはバージョンの指定は書いていないので、"~> 1.4"
は不要。(たぶん書いてあっても問題はない)bundle install
をDockerコンテナ内で行う場合は、bundle lock --add-platform x86_64-linux
は不要。(たぶん実行しても問題はない)「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の「最終課題(レポート)」に提出。構成は次のような感じで。
最初にどのようなものを作ろうと思ったか、動機や目標や背景。
できたアプリケーションの使い方の説明。
アプリケーションの内部構造の説明。
思った通りのものができたか、何が難しかったか。
Renderや自宅サーバにデプロイした場合は加点するので、「最終課題(サーバ)」にURLを提出。
1月19日の授業でデモをしたら、さらに加点するので、成績Sが欲しい人はがんばってください。
締め切りは1月25日(木)。
注意:参考にした資料はレポートの最後に参考文献リストとして書くこと。公開されているソースコードや友達に教えてもらったコードをそのまま使った場合は、コメントとしてどこからコピーしたかを明記すること。出典を明記せずにコピペすると、不正行為としてその学期の単位がすべてDになることがある。