Docker環境でPythonを動かす

「DockerでPython実行環境を作ってみる」
https://qiita.com/jhorikawa_err/items/fb9c03c0982c29c5b6d5

こちらの記事を参考にしました。

用意するもの

docker-env1/
  ├ Dockerfile
  ├ docker-compose.yml
  └ opt/
    └ sample.py

という構成。
環境はいくつか作ると思うので
evn1 env2 env3のように番号をふることにします。(命名は自由です)

それぞれファイルを作る

Dockerfile

FROM python:3
USER root

RUN apt-get update
RUN apt-get -y install locales && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

RUN apt-get install -y vim less
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

RUN python -m pip install jupyterlab

 

docker-compose.yml

version: '3'
services:
  python3:
    restart: always
    build: .
    container_name: 'python3'
    working_dir: '/root/'
    tty: true
    volumes:
      - ./opt:/root/opt

 

sample.py

import math
import sys

def main():
  val = float(sys.argv[1])
  print(math.radians(val))

if __name__ == "__main__":
  main()

これだけ。

 

あとはプロジェクトルートに入り、

docker-compose up -d --build

を実行。

そのあとにVisualStudioCodeのターミナルで

docker-compose exec python3 bash

を実行する。これでDocker上で起動している仮想Linuxのコンソールに入れる。

自分の場合は、なぜかWindows PowerShellでは上のコマンドが実行できなかったので注意。VSCodeのターミナルを使いましょう。

※個人の環境設定に起因するものかもしれません。

あとはそのターミナルでLinux内部に入っている状態になるので、sample.pyがあるフォルダ(optフォルダ)にcdコマンドで入ります。

そして

python sample.py 180.0

のようにコマンドを打つと、sample.py が実行されて円周率が出るはずです。

これで仮想Linux上でのPython環境をWindows上で構築できるというのは魅力的ですね。

以上、自分用のメモでした。

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