Digital OceanにRailsアプリをデプロイする方法(Rails7.0.4/ Ruby3.2.0)

Digital OceanにRailsアプリをデプロイする方法です。

月5ドルのAppsというプランを使います。
クレジットカードかペイパルアカウントが必要です。(2022年12月30日現在)

Droplets」というプランではなく(これはVPSのようなプランでした)「Apps」というプランを使います。これがHerokuのように、コードをデプロイするだけでアプリケーションが動いてくれるプランです。

 

まずはGitHubにDockerで作ったRailsアプリをデプロイしておきます。

そうしたら、Digital Oceanでアカウントを作成して、GitHubを連携します。するとリポジトリを選択できるようになるので、自分の作ったリポジトリを選びます。

基本的にはこれでデプロイはできます。

やる事:

環境変数にRailsのマスターキーと、データベースの環境変数を追加します。

Manage Env Varsから

2つの変数を追加します。

また、プロジェクトの実行環境をDigital Oceanの設定で「production」にしておきます。

次に、データベースを作成している場合にはマイグレーションコマンドを打ちます。
bundle exec rake db:migrate RAILS_ENV=production

最後に、

ちなみにデータベースは外部のConoHaのデータベースサーバーを使うのが安くて一番良いと思って使っています。月500円程度でスケールも出来て、コスパも良いのでオススメ。
MariaDBですがMySQLと同じです。

bundle exec rake assets:precompile
をする必要もありました。
プリコンパイルをしてJavaScriptやCSSのアセットを最小化して使えるようにするものです。

ただ、このコマンドはrails7からはデフォルトのGemfileでは必要なgemがコメントアウトされているので、それを外してbundle installする必要があります。

コメントアウトを外すのは
gem "sassc-rails"
というgemで、それを使えるようにしてからローカルのdocker環境で
docker-compose run --rm web bundle install
をしてあげればOKです。

これでDigital OceanでRails7が動くようになりました。

ただ、メモリが足りないのか、動作はかなりモッサリです。

他のサービルとも比較して、どのサービスを使うか決めようと思います。

何かの参考になれば幸いです。

Dockerでbundle installをするときのコマンド

Dockerでbundle installをするときのコマンドです。

docker-compose run --rm web bundle install

 

【メモ】
Rubyのバージョンを上げるとき

・Dockerfileのrubyのバージョンを上げる

・Gemfileのrubyのバージョンも上げる

docker-compose build --no-cache
docker-compose run --rm web bundle install

を実行。

参考:Docker + Rails(Ruby)をバージョンアップ(アップグレード)したお話

https://qiita.com/t0sh1/items/5e7ecdc8f47505118a1f

Rails7でターボリンクを無効化する方法

Rails7でターボリンクを無効化する方法です。

app\views\layouts\application.html.erb


    <%= stylesheet_link_tag 'application', media: 'all' %>
    <%= javascript_include_tag 'application' %>
という記述を追記します。
また、Gemfileのturbo-railsをコメントアウトして無効化します。

# コメントアウトして無効化
# gem 'turbo-rails'
bundle updateを行います。
dockerの場合はdocker-compose downしてから
docker-compose run web bundle update
すればOKです。
参考:

【Rails】Turbolinksの基本情報と実装方法

【Rails】turbolinksを無効化する方法
https://qiita.com/mattan5271/items/c4c8a5df03ae630ae534

ローカル開発環境のdockerで動くRailsにrubocop追加して実行できるようにする

Gemfileに以下を追加


# rubocopを導入
gem 'rubocop', require: false
gem 'rubocop-rails', require: false

上記を追加したら bundle installを実行する

docker-compose run web bundle install

もしくはdocker-compose のビルドをし直す

docker-compose build

rubocopを実行。以下のコマンドで動くはず。

docker-compose run web bundle exec rubocop -a

 

参考:
【Rails】RuboCopの基本的な使用方法と出力の見方
https://qiita.com/terufumi1122/items/ad55bf8713c0df053f58
Docker Compose + Railsでイメージ内でbundle installしているはずなのにgemが無いとエラーがでる。
https://qiita.com/hokita222/items/49f4ca54835e08fdd6b2

Ruby3.1.2/Ruby on Rails 7.04のサイトをdockerで作ってRender.comにデプロイする

Ruby3.1.2/Ruby on Rails 7.04のサイトをdockerで作ってRender.comにデプロイする方法です。

参考にしたサイト

 

 

また、Windowsパソコンでは改行コードの問題でエラーが出たので

 

Windows で Docker 環境構築時のエラー対処法【no such file or directory】

https://qiita.com/uggds/items/00a1974ec4f115616580

 

https://tadtadya.com/vs-code-settings-files-eol/

このあたりの設定をする必要があります。

https://teratail.com/questions/278349

このエラーが引き続き出たので

docker-compose build –no-cache

を実行してからアプリを作り直した(rails newをした)ところ、成功しました。

 

次に、GitHubにリポジトリを作成してコマンドラインでpushしようとするがうまくいかない。

GitHub Desktopで初回pushは「ローカルに存在するファイルをGitHubのリポジトリに上げる」というようなものを選択してpush。成功。

 

Renderで存在するリポジトリを選択してGitHubと接続。

 

接続したらNew+と書いてある部分をクリックして、Web Servicesを追加。

 

Regionやプランを選択する

 

 

 

 

 

 

 

 

 

 

 

そうすると、有効なホスト名が設定されていませんというエラーが出るので、ホストを追加する。

 

Rails6でBlocked hostエラーが発生した時の対処法

config\environments\production.rb

のファイル内に

 

config.hosts << “songstory.onrender.com”
このような設定を追加。

 

また同じファイルに

  config.public_file_server.enabled = ENV[‘RAILS_SERVE_STATIC_FILES’].present? || ENV[‘RENDER’].present? # render.com用に追記

このように、|| ENV[‘RENDER’].present?

を追加します。

config\environments\ にある

development.rbとtest.rbには

config.hosts.clear

を追加します。これでホスト名関係は大丈夫なはず。

あとはデータベースの接続ですが、
DATABASE_URL と RAILS_MASTER_KEY

を設定してあげます。これはrender.comの管理画面で行います。

そうしたら、以下のファイルを作成。これはチュートリアルに書かれています。

bin\render.yaml


# databases:
#   - name: mysite
#     databaseName: mysite
#     user: mysite

services:
  - type: web
    name: mysite
    env: ruby
    buildCommand: "./bin/render-build.sh"
    startCommand: "bundle exec puma -C config/puma.rb"
    envVars:
      - key: DATABASE_URL
        fromDatabase:
          name: mysite
          property: connectionString
      - key: RAILS_MASTER_KEY
        sync: false

このようにします。
今回データベースはConohaのデータベースを使っているので、コメントアウトしました。これで動いたのでとりあえずメモしておきます。

 

公式チュートリアル
https://render.com/docs/deploy-rails#deploy-to-render

 

ざっくりまとめ

・GitHubにソースが上がらなかったらGitHub Desktopをインストールしてアップロードするといける

・Render.comは外部のデータベース(今回はConoHaのMariaDB)
の設定は DATABASE_URL と RAILS_MASTER_KEY を管理画面で設定すればいけるっぽい。