7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu 22.04 で Rails 4.2 を動かすには?

Posted at

あるRailsアプリケーションを8年ぶりに動かそうとしています。
実行環境は、WSL上の Ubuntu 22.04 です。動かせるでしょうか?

8年前は2016年、Rails 5.0 がリリースされた年です。
残念ながら、このアプリケーションのRailsのバージョンは5.0ではなく、4.2でした。
Rails 4.2 がサポートしているRubyのバージョンは2.2です。

問題

Ubuntu 22.04 では Ruby 2.2 が動きません。正確には gem install できません。
実行すると次のエラーが出ます。

►gem install bundler
ERROR:  While executing gem ... (RuntimeError)
    Marshal.load reentered at marshal_load

実行したときに、このエラーが出ずにsegmentation faultすることもあります。

Ruby 2.2にはbundlerが含まれません。
gem installできないとbundle installもできず、ここから先に進むことはできません。

対応方法

これは既知のissueです。

に、対応方法がいくつか書かれています。

  • Don't use Ruby 2.2, it's EOL since forever and it's just broken with modern OS/C compilers
  • Use ubuntu-20.04
  • Use a Docker image

この中から、僕はDockerを選びました。

Dockerを使ってRails 4.2を動かす

ruby - Official Image | Docker Hub を使います。
次のDockerfileを用意します。

Dockerfile
FROM ruby:2.2

# throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1

WORKDIR /usr/src/app

COPY Gemfile Gemfile.lock ./
RUN gem install bundler -v 1.17.3
RUN bundle install --jobs 4

CMD ["bin/rails", "s", "-b", "0.0.0.0"]

bundlerはバージョンを指定しないと最新版がインストールされます。
最新のbundlerはRuby 2.2では動きません。
Ruby 2.2 で 動く bundler のバージョンを指定します。

次のコマンドでコンテナをビルドします。

docker buildx build -t temp .

次のコマンドでコンテナを起動します。

docker run --rm -v (pwd):/usr/src/app -p 3000:3000 temp

次のように、Railsアプリケーションが起動するのがわかります。

[2024-02-02 09:07:52] INFO  WEBrick 1.3.1
[2024-02-02 09:07:52] INFO  ruby 2.2.10 (2018-03-28) [x86_64-linux]
[2024-02-02 09:07:52] INFO  WEBrick::HTTPServer#start: pid=1 port=3000

:tada:

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?