DockerのubuntuイメージにRuby on Railsをインストールしてみた話
要目
dockerのubuntu:latestにRuby on Railsをインストールし、起動確認できるまでの作業まとめです。
実施日は 2024/10/21 ですので、その時点の最新のubuntuイメージで行っています。
インストールが必要なものだけ知りたい方は、まとめを参照ください。
動機
普段、開発環境を構築する時は最初からRubyがインストールされたDockerイメージを使ってますが、
素のubuntuにインストールしたらどうなるのかという興味本位の試みです。
用意したもの
Dockerが実行できる環境(今回はMac)
作業記録
とりあえずubuntuの入ったコンテナを使えるようにする
services:
app:
image: ubuntu:latest
tty: true
ports:
- 3000:3000
最近のDocker Composeはcompose.ymlというファイル名で良いのですね。
最低限の設定だけ済ませました。
ポート3000はRailsのローカルサーバ起動時のデフォルトです。
公式に従ってインストールを開始。
今回はSQLite使わないけど、マニュアルにあるのでインストールしてみます。
apt update
apt install -y ruby-full
apt install -y sqlite3
次にRailsのインストール
gem install rails
ERROR: Error installing rails:
:
make failedNo such file or directory - make
ここで早くもエラーが出ました。makeがない。
makeをインストールします。
再度railsのインストール
apt install -y make
gem install rails
ERROR: Error installing rails:
:
compiling cparse.c
make: aarch64-linux-gnu-gcc: No such file or directory
gccがない。
gccもインストールします。
3度目のrailsインストール
apt install -y gcc
gem install rails
今度は成功しました。
次にRailsアプリケーションを作ります。
名前はなんでも良いけど公式通りにblogにしました。
rails new blog
/var/lib/gems/3.2.0/gems/railties-7.2.1.1/lib/rails/generators/app_base.rb:750:in ``': No such file or directory - git (Errno::ENOENT)
またエラー。gitがない。ないものだらけですね。
gitをインストールします。
もう一度 rails newします。
apt install -y git
rails new blog
:
run bundle binstubs bundler
Could not find importmap-rails-2.0.3, turbo-rails-2.0.11, stimulus-rails-1.3.4,
debug-1.9.2, web-console-4.2.1, rdoc-6.7.0, psych-5.1.2 in locally installed
gems
さっきより進みましたが別のエラーが出ました。
なんか色々パッケージがないとのこと。
importmap-rails, turbo-rails, stimulus-rails, debug, web-console, rdoc, psychをgemを使ってインストール
gem install importmap-rails turbo-rails stimulus-rails debug web-console rdoc psych
:
Building native extensions. This could take a while...
ERROR: Error installing psych:
ERROR: Failed to build gem native extension.
:
current directory: /var/lib/gems/3.2.0/gems/psych-5.1.2/ext/psych
/usr/bin/ruby3.2 -I/usr/lib/ruby/vendor_ruby extconf.rb
checking for yaml.h... no
yaml.h not found
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
yamlがどうのこうのエラーが出ます。yamlがないのか。
yamlをaptでインストール。
そしてgemでpsychをインストール。
apt install -y libyaml-dev
gem install psych
rails new blog
:
exist
identical README.md
identical Rakefile
identical .ruby-version
identical config.ru
conflict .gitignore
Overwrite /home/ubuntu/blog/.gitignore? (enter "h" for help) [Ynaqdhm]
:
bin/rails aborted!
TZInfo::DataSourceNotFound: tzinfo-data is not present. Please add gem "tzinfo-data" to your Gemfile and run bundle install (TZInfo::DataSourceNotFound)
/home/ubuntu/blog/config/environment.rb:5:in `<main>'
新しいエラーが出ました。
タイムゾーンの設定がないのかしら。
設定しようにも timedatectl がなかったので tzdata をインストールします。
apt install -y tzdata
1. Africa 3. Antarctica 5. Asia 7. Australia 9. Indian 11. Etc
2. America 4. Arctic 6. Atlantic 8. Europe 10. Pacific
:
rails new blog
:
exist
identical README.md
identical Rakefile
identical .ruby-version
identical config.ru
conflict .gitignore
Overwrite /home/ubuntu/blog/.gitignore? (enter "h" for help) [Ynaqdhm]
途中で色々聞かれましたが、
5. Asia
78. Tokyo
を選択しました。
そして rails new を実行したらすでにblogが中途半端に出来てるので怒られます。
aを選択して上書きします。
これでようやく最後までインストールできました。
確認します。
blogディレクトリに移動してrails serverを実行します。
docker環境から動かしているのでホスト0.0.0.0を指定します。
cd blog
bin/rails server -b 0.0.0.0
webブラウザでlocalhost:3000を開くと、無事Railsアプリが動いてました。
まとめ
とりあえず素のubuntuにRuby on Railsをインストールしようとすると、以下のパッケージインストールが必要になりました。
#事前準備
apt update
apt install -y ruby-full sqlite3 make gcc git libyaml-dev tzdata
gem install rails importmap-rails turbo-rails stimulus-rails debug web-console rdoc psych
#Railsアプリケーションの作成
rails new blog
cd blog/
bin/rails server -b 0.0.0.0
おまけ
最初からRubyが入ってるイメージを使ってみましょう。
services:
app:
image: ruby:bullseye
tty: true
ports:
- 3000:3000
起動してRailsをインストールしてみます。
gem install rails
rails new blog
わずか2ステップで完了しました。
とっても楽ちんです。
Discussion