Upgrade procedure


#1

Hi,

I have a site running older versions of Ruby and Rails. It’s running
Ruby 1.8.4 and Rails 1.2.2.

It’s working fine, but I’ve set up a new desktop and now I need a
development environment for it.

I look at the latest version of Ruby and Rails and it’s not
compatible, so I’m left with two choices.

  1. Match the ruby and rails in production for now, while I plan for an
    upgrade. The only problem here is that I can’t seem to find older
    releases of ruby on the ruby website, and the online documentation
    doesn’t seem to track anything but the latest versions anyway.

  2. Upgrade production to the latest, but I’m unsure of the best
    procedure to do this. Right now the current boot.rb and environment.rb
    files are not even compatible so I’m assuming that I’d start there.

So, what is the recommended upgrade procedure, and where do I find
older copies of Ruby? I’m assuming that I can still find older copies
of rails by specifying the version to gem install.

Thanks,
Mike


#2

msoulier wrote:

I look at the latest version of Ruby and Rails and it’s not
compatible, so I’m left with two choices.

El Goog will find you “ruby-1.8.4 tar.bz2”. Remove your current Ruby and
install
that. You might then also need an older version of RubyGems.

Install the correct version of rails with

sudo gem install rails -v=1.2.2

I have written up the instructions on upgrading rails before, and I will
find
them and blog about them now…


#3

msoulier wrote:

So, what is the recommended upgrade procedure

Don’t say I never did nothin’ for ya!

http://broadcast.oreilly.com/2009/03/upgrading-rails.html


Phlip
http://www.zeroplayer.com/


#4

On Mar 28, 11:42 pm, Phlip removed_email_address@domain.invalid wrote:

Don’t say I never did nothin’ for ya!

http://broadcast.oreilly.com/2009/03/upgrading-rails.html

Cool, thanks!

Mike


#5

On Mar 28, 10:39 pm, Phlip removed_email_address@domain.invalid wrote:

El Goog will find you “ruby-1.8.4 tar.bz2”. Remove your current Ruby and install
that. You might then also need an older version of RubyGems.

Unfortunately 1.8.4 wouldn’t build on my current system. Looks like it
died in the openssl code, something likely backwards-incompatible.

Install the correct version of rails with

sudo gem install rails -v=1.2.2

Yup, did that and grabbed sqlite3-ruby for development.

Unfortunately running ruby 1.8.7 with rails 1.2.2 on the existing site
produces this

wrong number of arguments (2 for 1)
/home/msoulier/work/bin/papproach/lib/ruby/1.8/cgi/session.rb:267:in
respond_to ?' /home/msoulier/work/bin/papproach/lib/ruby/1.8/cgi/session.rb:267:ininitialize

/home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/
actionpack-1.13.2/lib/a
ction_controller/cgi_process.rb:122:in new' /home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/ actionpack-1.13.2/lib/a ction_controller/cgi_process.rb:122:insession’
/home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/
actionpack-1.13.2/lib/a
ction_controller/cgi_process.rb:154:in stale_session_check!' /home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/ actionpack-1.13.2/lib/a ction_controller/cgi_process.rb:109:insession’
/home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/
actionpack-1.13.2/lib/a
ction_controller/base.rb:1052:in assign_shortcuts_without_flash' /home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/ actionpack-1.13.2/lib/a ction_controller/flash.rb:140:inassign_shortcuts’
/home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/
actionpack-1.13.2/lib/a
ction_controller/base.rb:424:in process_without_filters' /home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/ actionpack-1.13.2/lib/a ction_controller/filters.rb:624:inprocess_without_session_management_support’
/home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/
actionpack-1.13.2/lib/a
ction_controller/session_management.rb:114:in process' /home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/ actionpack-1.13.2/lib/a ction_controller/base.rb:330:inprocess’
/home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/rails-1.2.2/
lib/dispatc
her.rb:41:in dispatch' /home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/rails-1.2.2/ lib/webrick _server.rb:113:inhandle_dispatch’
/home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/rails-1.2.2/
lib/webrick
server.rb:79:in service' /home/msoulier/work/bin/papproach/lib/ruby/1.8/webrick/httpserver.rb: 104:inser
vice’
/home/msoulier/work/bin/papproach/lib/ruby/1.8/webrick/httpserver.rb:
65:in run' /home/msoulier/work/bin/papproach/lib/ruby/1.8/webrick/server.rb: 173:instart_thread’
/home/msoulier/work/bin/papproach/lib/ruby/1.8/webrick/server.rb:
162:in start' /home/msoulier/work/bin/papproach/lib/ruby/1.8/webrick/server.rb: 162:instart_thread’
/home/msoulier/work/bin/papproach/lib/ruby/1.8/webrick/server.rb:95:in
start' /home/msoulier/work/bin/papproach/lib/ruby/1.8/webrick/server.rb:92:ineach’
/home/msoulier/work/bin/papproach/lib/ruby/1.8/webrick/server.rb:92:in
start' /home/msoulier/work/bin/papproach/lib/ruby/1.8/webrick/server.rb:23:instart’
/home/msoulier/work/bin/papproach/lib/ruby/1.8/webrick/server.rb:82:in
start' /home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/rails-1.2.2/ lib/webrick_server.rb:63:indispatch’
/home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/rails-1.2.2/
lib/commands/servers/webrick.rb:59
/home/msoulier/work/bin/papproach/lib/ruby/site_ruby/1.8/rubygems/
custom_require.rb:21:in require__' /home/msoulier/work/bin/papproach/lib/ruby/site_ruby/1.8/rubygems/ custom_require.rb:21:inrequire’
/home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/
activesupport-1.4.1/lib/active_support/dependencies.rb:495:in
require' /home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/ activesupport-1.4.1/lib/active_support/dependencies.rb:342:innew_constants_in’
/home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/
activesupport-1.4.1/lib/active_support/dependencies.rb:495:in
require' /home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/rails-1.2.2/ lib/commands/server.rb:39 /home/msoulier/work/bin/papproach/lib/ruby/site_ruby/1.8/rubygems/ custom_require.rb:21:inrequire
_’
/home/msoulier/work/bin/papproach/lib/ruby/site_ruby/1.8/rubygems/
custom_require.rb:21:in require' /home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/ activesupport-1.4.1/lib/active_support/dependencies.rb:495:inrequire’
/home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/
activesupport-1.4.1/lib/active_support/dependencies.rb:342:in
new_constants_in' /home/msoulier/work/bin/papproach/lib/ruby/gems/1.8/gems/ activesupport-1.4.1/lib/active_support/dependencies.rb:495:inrequire’
script/server:3

Obviously some incompatibility here…

Mike


#6

On Sat, Mar 28, 2009 at 5:34 PM, msoulier removed_email_address@domain.invalid wrote:

I have a site running older versions of Ruby and Rails. It’s running
Ruby 1.8.4 and Rails 1.2.2.

It’s working fine, but I’ve set up a new desktop and now I need a
development environment for it.

To add to the good advice you already got – I would seriously think
about creating a virtualized environment to replicate production’s
ruby/rails/gems setup rather than changing your desktop system’s
base install.

You might even create other VMs for the intermediate steps of the
upgrade – no unexpected conflicts, disposable when finished.

FWIW,

Hassan S. ------------------------ removed_email_address@domain.invalid


#7

msoulier wrote:

Unfortunately 1.8.4 wouldn’t build on my current system. Looks like it
died in the openssl code, something likely backwards-incompatible.

Post the error - it’s probably just a missing openssl-dev package.

Obviously some incompatibility here…

1.8.7 is too big a leap over 1.8.6 - try that.

But stop screwing with your production server to try things!


#8

On Mar 29, 11:01 am, Phlip removed_email_address@domain.invalid wrote:

Post the error - it’s probably just a missing openssl-dev package.

I don’t think so since 1.8.7 builds fine. My desktop is gentoo so
there are no dev packages, it’s all here.

1.8.7 is too big a leap over 1.8.6 - try that.

Ok, but I’m curious as to what the problem is…

I think it’s the bootstrap and environment code. I’m not sure that
copying all of that into the web app is such a good idea.

But stop screwing with your production server to try things!

That’s a joke right? No way do I touch production. That’s why I’m
trying to recreate production on my desktop.

I’m thinking of a new O’Reilly book. “Maintaining Rails applications
in the real world”.

Mike


#9

msoulier wrote:

I don’t think so since 1.8.7 builds fine. My desktop is gentoo so
there are no dev packages, it’s all here.

Post the error. And can this gentoo thing get an older openssl and put
it where
Ruby 1.8.4 can find it?

But stop screwing with your production server to try things!

That’s a joke right? No way do I touch production. That’s why I’m
trying to recreate production on my desktop.

Did not read closely.

I’m thinking of a new O’Reilly book. “Maintaining Rails applications
in the real world”.

Yay. Ain’t gonna write it! Too busy maintaining Rails apps in the real
world.

Oh, and Rails 3 is secretly gonna be Merb configured to look like Rails.
Joy. If
too few established rails sites use it (like >100,000 users), then maybe
Rails 2
will never go out of maintenance, despite my blog entry!


#10

On Mar 29, 11:01 am, Phlip removed_email_address@domain.invalid wrote:

msoulier wrote:

Unfortunately 1.8.4 wouldn’t build on my current system. Looks like it
died in the openssl code, something likely backwards-incompatible.

Post the error - it’s probably just a missing openssl-dev package.

As requested. Looks like an api change in openssl to me.

compiling openssl
make[1]: Entering directory /home/msoulier/temp/ruby-1.8.4/ext/ openssl' gcc -fPIC -g -O2 -I. -I../.. -I../../. -I../.././ext/openssl - DHAVE_UNISTD_H -DHAVE_SYS_TIME_H -DHAVE_ASSERT_H -DHAVE_OPENSSL_SSL_H - DHAVE_OPENSSL_CONF_API_H -DHAVE_ERR_PEEK_LAST_ERROR -DHAVE_BN_MOD_ADD - DHAVE_BN_MOD_SQR -DHAVE_BN_MOD_SUB -DHAVE_BN_PSEUDO_RAND_RANGE - DHAVE_BN_RAND_RANGE -DHAVE_CONF_GET1_DEFAULT_CONFIG_FILE - DHAVE_EVP_CIPHER_CTX_SET_PADDING -DHAVE_EVP_CIPHERFINAL_EX - DHAVE_EVP_CIPHERINIT_EX -DHAVE_EVP_DIGESTFINAL_EX - DHAVE_EVP_DIGESTINIT_EX -DHAVE_EVP_MD_CTX_CLEANUP - DHAVE_EVP_MD_CTX_CREATE -DHAVE_EVP_MD_CTX_DESTROY - DHAVE_EVP_MD_CTX_INIT -DHAVE_HMAC_CTX_CLEANUP -DHAVE_HMAC_CTX_INIT - DHAVE_PEM_DEF_CALLBACK -DHAVE_X509V3_SET_NCONF - DHAVE_X509V3_EXT_NCONF_NID -DHAVE_X509_CRL_ADD0_REVOKED - DHAVE_X509_CRL_SET_ISSUER_NAME -DHAVE_X509_CRL_SET_VERSION - DHAVE_X509_CRL_SORT -DHAVE_OPENSSL_CLEANSE -DHAVE_VA_ARGS_MACRO - DHAVE_OPENSSL_ENGINE_H -DHAVE_ENGINE_ADD - DHAVE_ENGINE_LOAD_BUILTIN_ENGINES -DHAVE_ENGINE_GET_DIGEST - DHAVE_ENGINE_GET_CIPHER -DHAVE_ENGINE_CLEANUP -DHAVE_OPENSSL_OCSP_H - DHAVE_ST_FLAGS -DHAVE_ST_ENGINE -DHAVE_ST_SINGLE -c ossl_ocsp.c In file included from ossl.h:190, from ossl_ocsp.c:12: openssl_missing.h:119: error: conflicting types for 'BN_rand_range' /usr/include/openssl/bn.h:411: error: previous declaration of 'BN_rand_range' was here openssl_missing.h:120: error: conflicting types for 'BN_pseudo_rand_range' /usr/include/openssl/bn.h:412: error: previous declaration of 'BN_pseudo_rand_range' was here ossl_ocsp.c: In function 'ossl_ocspreq_initialize': ossl_ocsp.c:114: warning: passing argument 2 of 'd2i_OCSP_REQUEST' from incompatible pointer type ossl_ocsp.c: In function 'ossl_ocspres_initialize': ossl_ocsp.c:321: warning: passing argument 2 of 'd2i_OCSP_RESPONSE' from incompatible pointer type make[1]: *** [ossl_ocsp.o] Error 1 make[1]: Leaving directory/home/msoulier/temp/ruby-1.8.4/ext/
openssl’
make: *** [all] Error 1

Mike


#11

msoulier wrote:

openssl_missing.h:119: error: conflicting types for ‘BN_rand_range’
/usr/include/openssl/bn.h:411: error: previous declaration of
‘BN_rand_range’ was here
openssl_missing.h:120: error: conflicting types for
‘BN_pseudo_rand_range’

If I were on my own notebook, I would just pick one of those header
files and
edit it.

The point is C++ “recently” (meaning “recently” in glacial C++ time)
became more
restrictive around pointer types. Foo * cannot silently cast to Foo
const *
anymore, despite the latter is more restrictive. So one function
prototype
cannot match the other.

But the linker can’t see these details, so if you just tweak the
headers, the
compiler was the last chance to catch this non-error, and if you thwart
it, you
will have your executables.

Or you could try the next tick of Ruby & the next tick of Rails…


#12

On Mar 29, 11:17 am, Phlip removed_email_address@domain.invalid wrote:

Post the error. And can this gentoo thing get an older openssl and put it where
Ruby 1.8.4 can find it?

I’ll have to investigate. It’s running openssl 0.9.8j, which is likely
too new for the older ruby.

Maybe it’s just time to upgrade everything and once I figure out the
steps, do it in production.

Yay. Ain’t gonna write it! Too busy maintaining Rails apps in the real world.

:slight_smile: I Just wish all the Rails books I read mentioned how difficult this
kind of thing can be. They always make working with these new
frameworks look so attractive without mentioning that if you don’t
move forward in production quickly enough then you’ll find yourself
left behind.

Oh, and Rails 3 is secretly gonna be Merb configured to look like Rails. Joy. If
too few established rails sites use it (like >100,000 users), then maybe Rails 2
will never go out of maintenance, despite my blog entry!

Hmm. Django anyone? :wink:

Mike


#13

On Mar 29, 12:37 pm, Phlip removed_email_address@domain.invalid wrote:

If I were on my own notebook, I would just pick one of those header files and
edit it.

As it turns out I don’t need openssl support for this site, so I
deleted the openssl extension and built without it.

I still need an upgrade strategy, but now I can work on that and
maintain the site too.

Thanks,
Mike


#14

msoulier wrote:

I still need an upgrade strategy, but now I can work on that and
maintain the site too.

Can you try the cycle I blogged about?