**************** サーバでの公開 **************** ============================== Railsの動作環境(Environment) ============================== Railsには動作環境として development と production がある(ほんとは test もあるけれど、それは省略)。 development 毎回コードを読み込んで実行するので、変更がすぐに反映される。 production 一度読み込んだコードはキャッシュするので、変更したらウェブサーバの再起動などが必要。その代わり速い。 環境の指定 ---------- * 環境変数 ``RAILS_ENV`` で指定する。 * ウェブサーバから起動するプロセスについては、使うシステムによって指定方法が用意されている。例えばApache+Passengerの場合は、Apacheの設定ファイルの中に ``PassengerAppEnv`` ディレクティブを書く。 環境による設定の切り替え ------------------------ * 初期設定は ``config/environments/development.rb`` と ``config/environments/production.rb`` に書く。 * データベースの設定は ``config/database.yml`` の中に環境ごとに区切って書く。 * デフォルトでは開発環境も本番環境もsqlite3を使うが、データベースのファイルは ``db/development.sqlite3`` と ``db/production.sqlite3`` と別のものになっている。 * 本番環境では扱うデータ量が多いので、PostgresqlやMySQLを使うことが多い。 =================== gemのインストール =================== * gemによってはnative extensionを含むものがあり、これはCPUやOSやライブラリに依存するので、一般には本番マシンでインストールし直さなければならない。 * 最近は開発マシンも本番マシンもDockerを使って全く同じ環境にすることも多い。 ============== セキュリティ ============== * 一般に公開する場合はセキュリティホールを作らないように注意。 * 参考資料: `Ruby on Rails とセキュアプログラミング `_ * CNSのサーバを使う場合は、CNSの規則も守ること。 * 参考資料: `SFC-CNS利用内規 `_ ==================== Renderへのデプロイ ==================== Renderについて -------------- `Render `_ はRailsホスティングサービスの一つ。 商用サービスであるが、ごく小さなアプリケーションなら無料アカウントで利用可能。ただし、データベースは90日経つと削除される。 GitHubについて -------------- Renderは、GitHubまたはGitLabのリポジトリからデプロイするようになっているので、まずGitHub(またはGitLab)のリポジトリを作ることが必要。GitHubについてはググればいくらでも解説が見つかる(例えば次の資料)ので、そちらを参照。 * `Git GitHub の始め方(超入門) #Git - Qiita `_ デプロイの手順 -------------- * 参考資料: `【完全版】Rails Renderデプロイガイド #Ruby - Qiita `_ 概ねこの資料の通りで良いが、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 メール送信の設定 ---------------- メールを送信する必要がある場合は、環境変数でメールサーバのログイン名とパスワードを設定する( :numref:`mailer` )。 Web Service を作成する時にやってもよいし、後で Dashboard の Environment でも設定できる。 Deviseでメールを送信するのはパスワード再発行のときだけなので、パスワード漏洩リスクが嫌な人は、設定しないのもアリ。 ファイルのアップロード ---------------------- Active Storage によるファイルのアップロード( :numref:`画像` )でサーバのディスクに保存するよう指定した場合、Renderでは実行イメージに保存されるので、とりあえずは動く。しかし、無料プランではアイドル状態が一定時間続くと実行イメージは消去されるので、次にアクセスしたときには画像が消えていることがある。 デプロイした例 -------------- `https://sfc-script-lang.onrender.com/ `_ .. admonition:: 最終課題 :class: exercise * ソースコードは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になることがある。