Forum: Ruby on Rails upgrade procedure

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
msoulier (Guest)
on 2009-03-29 03:35
(Received via mailing list)
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
Phlip (Guest)
on 2009-03-29 06:40
(Received via mailing list)
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...
Phlip (Guest)
on 2009-03-29 07:44
(Received via mailing list)
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/
msoulier (Guest)
on 2009-03-29 17:56
(Received via mailing list)
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
Hassan S. (Guest)
on 2009-03-29 18:49
(Received via mailing list)
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
msoulier (Guest)
on 2009-03-29 18:51
(Received via mailing list)
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:in
`initialize
'
/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:in `session'
/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:in `session'
/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:in `assign_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:in
`process_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:in `process'
/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:in `handle_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:in `ser
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:in `start_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:in `start_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:in
`each'
/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:in
`start'
/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:in `dispatch'
/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:in `require'
/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: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: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:in `require__'
/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:in
`require'
/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:in
`require'
script/server:3

Obviously some incompatibility here...

Mike
Phlip (Guest)
on 2009-03-29 19:03
(Received via mailing list)
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!
msoulier (Guest)
on 2009-03-29 19:11
(Received via mailing list)
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
msoulier (Guest)
on 2009-03-29 19:18
(Received via mailing list)
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
Phlip (Guest)
on 2009-03-29 19:18
(Received via mailing list)
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!
msoulier (Guest)
on 2009-03-29 19:27
(Received via mailing list)
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.

:) 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? ;-)

Mike
Phlip (Guest)
on 2009-03-29 20:38
(Received via mailing list)
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...
msoulier (Guest)
on 2009-03-30 01:14
(Received via mailing list)
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
Phlip (Guest)
on 2009-03-30 04:07
(Received via mailing list)
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?
This topic is locked and can not be replied to.