Moving a ruby/rails app from one server to another

I have been given task to move an app, the database, and all required software from an old system (going away soon) to a new one. I think I have all the software BUT can't get the app to 'work'. So, my question is what is the step to migrate a ruby on rails app?

“old” server

saptip:/etc# ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [ia64-linux] saptip:/etc# rails -v Rails 2.3.5 saptip:/# apache2 -v Server version: Apache/2.2.9 (Debian) Server built: Nov 14 2009 21:10:54 saptip:/# mysql -h localhost -V mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (ia64) using readline 5.2 saptip:/etc# uname -a Linux saptip 2.6.26-2-mckinley #1 SMP Thu Feb 11 11:08:30 UTC 2010 ia64 GNU/Linux

“new” server

[root@s928-apsaptip etc]# rails -v Rails 4.2.5 [root@s928-apsaptip etc]# httpd -v Server version: Apache/2.4.6 (Red Hat Enterprise Linux) Server built: Sep 17 2015 09:06:30 [root@s928-apsaptip etc]# mysql -h localhost -V mysql Ver 14.14 Distrib 5.6.29, for Linux (x86_64) using EditLine wrapper [root@s928-apsaptip etc]# uname -a Linux s928-apsaptip.ssmhc.com 3.10.0-229.4.2.el7.x86_64 #1 SMP Fri Apr 24 15:26:38 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux

Your app expects an old version of Rails (2.3.5) from 2009/10 (which is likely now full of security holes). For the app to work you must ensure that you have the right version of rails and all the other gems on the new machine. Go back to the old one and check every gem that is used and make sure you use exactly that version (and initially only that version) on the new machine. Once it is working upgrade it to Rails 4.

If at all possible it would be much better to upgrade to Rails 4 on the old server, then at least you are starting with a working system. With current rails versions the gem version problem is solved by the use of Gemfile and Gemfile.lock. It is not safe to have an internet facing rails app using 2.3.5

Unfortunately it will be probably be no slight task upgrading the app. You will probably need someone experienced in Rails to do this.

Colin

I discovered this fact the same time you replied. Not sure where to go from here. Thanks, though. Also, this is an internal site/app so no internet access for this system.

Time to find a ruby developer...

Not only ruby, but Rails.

Colin

I managed to get a "Hello World" app working... so what do need to do to move the app from one server to another? This is apparently a SIMPLE app and doesn't use a bunch of libraries and such. I though I could just copy to directory tree over but that didn't seem to work.

The only clue I have is in the command "rake -T". it works beautifully in the 'hello world' app dir but fails in the one I moved over:

[root@s928-apsaptip tip]# rake -T rake aborted! LoadError: cannot load such file -- initializer /var/rails/tip/config/boot.rb:55:in `load_initializer' /var/rails/tip/config/boot.rb:38:in `run' /var/rails/tip/config/boot.rb:11:in `boot!' /var/rails/tip/config/boot.rb:110:in `<top (required)>' /var/rails/tip/Rakefile:4:in `<top (required)>' (See full trace by running task with --trace)

[root@s928-apsaptip tip]# rake -T --trace rake aborted! LoadError: cannot load such file -- initializer /usr/local/share/ruby/site_ruby/rubygems/core_ext/kernel_require.rb:119:in `require' /usr/local/share/ruby/site_ruby/rubygems/core_ext/kernel_require.rb:119:in `require' /var/rails/tip/config/boot.rb:55:in `load_initializer' /var/rails/tip/config/boot.rb:38:in `run' /var/rails/tip/config/boot.rb:11:in `boot!' /var/rails/tip/config/boot.rb:110:in `<top (required)>' /usr/local/share/ruby/site_ruby/rubygems/core_ext/kernel_require.rb:54:in `require' /usr/local/share/ruby/site_ruby/rubygems/core_ext/kernel_require.rb:54:in `require' /var/rails/tip/Rakefile:4:in `<top (required)>' /usr/local/share/gems/gems/rake-11.1.2/lib/rake/rake_module.rb:28:in `load' /usr/local/share/gems/gems/rake-11.1.2/lib/rake/rake_module.rb:28:in `load_rakefile' /usr/local/share/gems/gems/rake-11.1.2/lib/rake/application.rb:689:in `raw_load_rakefile' /usr/local/share/gems/gems/rake-11.1.2/lib/rake/application.rb:94:in `block in load_rakefile' /usr/local/share/gems/gems/rake-11.1.2/lib/rake/application.rb:176:in `standard_exception_handling' /usr/local/share/gems/gems/rake-11.1.2/lib/rake/application.rb:93:in `load_rakefile' /usr/local/share/gems/gems/rake-11.1.2/lib/rake/application.rb:77:in `block in run' /usr/local/share/gems/gems/rake-11.1.2/lib/rake/application.rb:176:in `standard_exception_handling' /usr/local/share/gems/gems/rake-11.1.2/lib/rake/application.rb:75:in `run' /usr/local/share/gems/gems/rake-11.1.2/bin/rake:33:in `<top (required)>' /usr/local/bin/rake:23:in `load' /usr/local/bin/rake:23:in `<main>'

library issues?

I managed to get a "Hello World" app working... so what do need to do to move the app from one server to another? This is apparently a SIMPLE app and doesn't use a bunch of libraries and such. I though I could just copy to directory tree over but that didn't seem to work.

Have you checked the versions of all the gems (including rails) used on the old server and installed those and only those on the new one? If you have only that app to get going that is the easiest way of making sure you pick up the right gems.

Colin

"Have you checked the versions of all the gems (including rails) used on the old server and installed those and only those on the new one?"

using gem list --local

the old system has 16, the new one 64 Here is the list of the differences:

gem old new

I think I got farther. Even though I have loaded acts_as_ferret I get the following error. Since I know zero of config files I suspect it is something there:

[root@s928-apsaptip tip]# rails s => Booting WEBrick => Rails 4.2.5 application starting in development on http://localhost:3000 => Run `rails server -h` for more startup options => Ctrl-C to shutdown server Exiting /var/rails/new_tip/tip/config/environment.rb:8:in `require': cannot load such file -- acts_as_ferret (LoadError)         from /var/rails/new_tip/tip/config/environment.rb:8:in `<top (required)>'         from /var/rails/new_tip/tip/config.ru:3:in `require'         from /var/rails/new_tip/tip/config.ru:3:in `block in <main>'         from /usr/local/share/gems/gems/rack-1.6.4/lib/rack/builder.rb:55:in `instance_eval'         from /usr/local/share/gems/gems/rack-1.6.4/lib/rack/builder.rb:55:in `initialize'         from /var/rails/new_tip/tip/config.ru:in `new'         from /var/rails/new_tip/tip/config.ru:in `<main>'         from /usr/local/share/gems/gems/rack-1.6.4/lib/rack/builder.rb:49:in `eval'         from /usr/local/share/gems/gems/rack-1.6.4/lib/rack/builder.rb:49:in `new_from_string'         from /usr/local/share/gems/gems/rack-1.6.4/lib/rack/builder.rb:40:in `parse_file'         from /usr/local/share/gems/gems/rack-1.6.4/lib/rack/server.rb:299:in `build_app_and_options_from_config'         from /usr/local/share/gems/gems/rack-1.6.4/lib/rack/server.rb:208:in `app'         from /usr/local/share/gems/gems/railties-4.2.5/lib/rails/commands/server.rb:61:in `app'         from /usr/local/share/gems/gems/rack-1.6.4/lib/rack/server.rb:336:in `wrapped_app'         from /usr/local/share/gems/gems/railties-4.2.5/lib/rails/commands/server.rb:139:in `log_to_stdout'         from /usr/local/share/gems/gems/railties-4.2.5/lib/rails/commands/server.rb:78:in `start'         from /usr/local/share/gems/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:80:in `block in server'         from /usr/local/share/gems/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:75:in `tap'         from /usr/local/share/gems/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:75:in `server'         from /usr/local/share/gems/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:39:in `run_command!'         from /usr/local/share/gems/gems/railties-4.2.5/lib/rails/commands.rb:17:in `<top (required)>'         from /var/rails/new_tip/tip/bin/rails:9:in `require'         from /var/rails/new_tip/tip/bin/rails:9:in `<top (required)>'         from /usr/local/share/gems/gems/spring-1.7.1/lib/spring/client/rails.rb:28:in `load'         from /usr/local/share/gems/gems/spring-1.7.1/lib/spring/client/rails.rb:28:in `call'         from /usr/local/share/gems/gems/spring-1.7.1/lib/spring/client/command.rb:7:in `call'         from /usr/local/share/gems/gems/spring-1.7.1/lib/spring/client.rb:30:in `run'         from /usr/local/share/gems/gems/spring-1.7.1/bin/spring:49:in `<top (required)>'         from /usr/local/share/gems/gems/spring-1.7.1/lib/spring/binstub.rb:11:in `load'         from /usr/local/share/gems/gems/spring-1.7.1/lib/spring/binstub.rb:11:in `<top (required)>'         from /usr/local/share/ruby/site_ruby/rubygems/core_ext/kernel_require.rb:55:in `require'         from /usr/local/share/ruby/site_ruby/rubygems/core_ext/kernel_require.rb:55:in `require'         from /var/rails/new_tip/tip/bin/spring:13:in `<top (required)>'         from bin/rails:3:in `load'         from bin/rails:3:in `<main>'

There is *a lot* of difference between Rails 2.3 and 4.2 (I know because I've recently helped a client do that "upgrade"†).

If your "old" application didn't use `bundler` (aka, does it have a `Gemfile` and `Gemfile.lock` in the top directory?), that might be the first tiny upgrade to make. Bundler did not exist when Rails 2.3 was current so it's not likely present unless someone introduced it.

At the very least, you could update rails to 2.3.18 (the last of its lineage). In a Gemfile, that would be:     gem 'rails', '~> 2.3'

The `will_paginate` gem does not support Rails 4 (unless that has changed somewhat recently). You might want to look at `kaminari` as a replacement for pagination.

-Rob

† it was actually a "full body transplant" rather than an "upgrade in place". We started with a bare Rails 4.2.x application and generated models as we went along, copying the relevant contents from the old application into the new. Same with controllers.

Probably, you have no hope as you have it, you are still trying to use rails 4.2.5 which is hugely different to 2.3.5 Installing a specific gem version is easy. For example gem install <name> -v n.n.n

Not sure whether for Rails you can just remove the gem versions above and install the 2.3.5 ones or if you will also have problems with the support tools that come with rails being of a later flavour

You might also have issues with the version of Ruby you have installed. I don't know which versions of Ruby 2.3 will run with. The nicest way to do it would be to use rvm, which lets you run multiple versions of gems from what are called gemsets, then you can just make the right versions of gems available to your app. Rvm will also allow multiple versions of ruby. But really you are on a massive learning curve, you need someone who knows what they are doing or you will be splashing about in the swamp for a long time.

Colin

I have not used red hat for years but with ubuntu 14.04 LTS (and some other similar systems) I have configured the system to support rails 2.3.18 using this script <http://opencampground.com/SWinstall.sh&gt;\. Take a look at it and you will see there is a lot needing to be changed from a vanilla system. You will have no luck running rails 2.3.18 with a ruby later than 1.9.1 which is about impossible to find. You really need ruby 1.8.7. Make sure you grab the apache passenger virtual host definition files from the old system before it vanishes.

Norm

"Have you checked the versions of all the gems (including rails) used on the old server and installed those and only those on the new one?"

using gem list --local

the old system has 16, the new one 64 Here is the list of the differences:

gem old new ------------------------------------ actionmailer (2.3.5) (4.2.5) actionpack (2.3.5) (4.2.5) activerecord (2.3.5) (4.2.5) activesupport (2.3.5) (4.2.5) acts_as_ferret (0.4.8.2) (0.5.4) devise (1.0.5) na fastthread (1.0.7) na ferret (0.11.6) (0.11.8.6) jk-ferret (0.11.8.3) na passenger (2.2.11) (5.0.27, 5.0.26) rack (1.0.1) (1.6.4) rails (2.3.5) (4.2.5) warden (0.10.2) na will_paginate (2.3.12) na

So... do I get rid of ALL the new gems and try to figure out how to just install the old ones?

Probably, you have no hope as you have it, you are still trying to use rails 4.2.5 which is hugely different to 2.3.5 Installing a specific gem version is easy. For example gem install <name> -v n.n.n

Not sure whether for Rails you can just remove the gem versions above and install the 2.3.5 ones or if you will also have problems with the support tools that come with rails being of a later flavour

You might also have issues with the version of Ruby you have installed. I don't know which versions of Ruby 2.3 will run with. The nicest way to do it would be to use rvm, which lets you run multiple versions of gems from what are called gemsets, then you can just make the right versions of gems available to your app. Rvm will also allow multiple versions of ruby. But really you are on a massive learning curve, you need someone who knows what they are doing or you will be splashing about in the swamp for a long time.

Actually thinking about it I could probably lead you through setting the environment up using rvm fairly easily, assuming you are on a sensible OS. What OS are you using?

Colin