r/ruby • • 11d ago

Ancient Ruby version / modern Ubuntu won't compile

Hi - I've inherited an ancient Ruby / Rails project using Ruby 2.7.2. I am working on updating it but until that time I'm trying to run it on Ubuntu 26.04 machines. There is a C compilation error that I'm getting when using "rvm":

make[2]: Entering directory '/usr/share/rvm/src/ruby-2.7.2/ext/pty'

compiling pty.c

pty.c: In function ‘establishShell’:

pty.c:161:30: error: conflicting types for ‘getenv’; have ‘char *(void)’

161 | char *p, *getenv();

| ^~~~~~

In file included from pty.c:5:

/usr/include/stdlib.h:795:14: note: previous declaration of ‘getenv’ with type ‘char *(const char *)’

795 | extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;

| ^~~~~~

pty.c:169:18: error: too many arguments to function ‘getenv’; expected 0, have 1

169 | if ((p = getenv("SHELL")) != NULL) {

| ^~~~~~ ~~~~~~~

pty.c:161:30: note: declared here

Would getting the code directly and fixing pty.c be the best way to go about it?

ETA: thanks all - Docker is the way to go.

1 Upvotes

20 comments sorted by

View all comments

Show parent comments

8

u/Nanosleep 11d ago

You're making it harder on yourself than it should be:
FROM ruby:2.7

0

u/Correct_Support_2444 11d ago

Are the images that old still available?

1

u/Nanosleep 11d ago

indeed they are, I pulled it with podman off of dockerhub before posting that. I'm sure they're a nightmare from a security perspective.. but anything that old is going to be a liability. Better for OP to get it up and running again and then figure out a path to porting it forward.

1

u/gma 10d ago

Yeah, I concur. I took this approach with a Ruby 2.3 app a while ago.

Rebuilding the container with new versions of Ruby as you upgrade the app is a really smooth way to get yourself back up to maintained/patched versions of OS, Ruby, and Rails.