💎

VSCode Remote Container で最新の Ruby on Rails 環境を構築して Heroku にデプロイする

2022/01/09に公開

WSL2 内でディレクトリを作成して VSCode で開く。

$ mkdir myapp
$ cd myapp
$ code .

Remote-Container として開きなおす。Ctl+Shift+P でコマンドパレットを開いて以下を実行。

>Remote-Containers: Reopen in Container

各種環境を選択できるが、rails とでも入力して以下を選択する。

Ruby on Rails & Postgres

2022/05/13時点での ruby, Rails のバージョンは以下となっている。

$ ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
$ rails -v
Rails 7.0.3

Rails アプリを作成

$ rails new .

このままでは Root ページがないため、scaffold で単純な Todo リストを作成して表示する。

$ rails g scaffold todo content:text

config/routes.rb に以下を追記。

config/routes.rb
  root "todos#index"

利用するデータベースを sqlite3 から postgresql に変更する。

Gemfile
@@ -12,2 +12,2 @@ gem "sprockets-rails"
-# Use sqlite3 as the database for Active Record
-gem "sqlite3", "~> 1.4"
+# Use postgresql as the database for Active Record
+gem "pg"

gem をインストール

$ bundle install

.devcontainer/devcontainer.json に記載されている database 名や username を config/database.yml と合わせるため、 adapter を postgresql にし、各環境の database, username, host を変更する。

config/database.yml
default: &default
  adapter: postgresql
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: app_development
  username: vscode
  host: localhost

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: app_test
  username: vscode
  host: localhost

production:
  <<: *default

ローカルの database を作成して migrate する。

$ rails db:create
$ rails db:migrate

ローカルで起動してCRUD操作ができることを確認する。

$ rails s

Heroku CLI のインストールからプッシュまでを行う。
詳細は Heroku スターターガイド (Rails 7.x) に記載されている。

Heroku CLI のインストール

$ curl https://cli-assets.heroku.com/install.sh | sh

Heroku へのログインとアプリの作成

$ heroku login #何らかのキーを押すとブラウザが開くのでログインする
$ heroku create

Git で commit と push し、DB を migrate する。

$ git add .
$ git commit -m "init"
$ git push heroku main
$ heroku run rake db:migrate
$ heroku open

ブラウザが開くので Heroku 上で Todo の作成ができればOK。

Discussion