Seaside application deployment/migration/update

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
13 messages Options
Reply | Threaded
Open this post in threaded view
|

Seaside application deployment/migration/update

fstephany
Hi guys,

I'm about to release my first real world Seaside app but I'm a bit
confused.

How do you update your code and deal with model changes ?

My first guess would be "upload an mcz file in a folder and load it from
the image (on a regular basis or by manually triggering an action in the
admin section of my web application)."

Do you have any other way to do it ? How do handle big changes in your
models ? Do you use some sort of migration ?

An other problem for me is how do you deal with multiple environments ?
I'm used to have a development, a staging and a production environment.
In dev for example, I want to use S3 in staging and prod but not in dev.
Is there any convention/approach in this field ?

I use migrations, Vlad the deployer and Rails.env everyday in ruby/rails
and I wonder how to tackle them in Smalltalk/Seaside...

Thanks,
Francois

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside application deployment/migration/update

Diogenes Moreira
Hi the seaside admistrator app  has a tool to upload a mcz with a new version and save the image or you can update a package from a monticello repository via RFB or Screen shot tools.

Whe you talk about change, how long are that changes. ? Is The new model incompatibe with the older.?

Remember when you change the class structure, the compiler make the changes for all instances.

But that not enogh. You can persist the data in a chunck and recover late.

Sorry for my english.
Best
D.
Enviado desde mi BlackBerry® de Claro Argentina

-----Original Message-----
From: Francois Stephany <[hidden email]>
Sender: [hidden email]
Date: Tue, 03 May 2011 21:46:02
To: <[hidden email]>
Reply-To: Seaside - general discussion <[hidden email]>
Subject: [Seaside] Seaside application deployment/migration/update

Hi guys,

I'm about to release my first real world Seaside app but I'm a bit
confused.

How do you update your code and deal with model changes ?

My first guess would be "upload an mcz file in a folder and load it from
the image (on a regular basis or by manually triggering an action in the
admin section of my web application)."

Do you have any other way to do it ? How do handle big changes in your
models ? Do you use some sort of migration ?

An other problem for me is how do you deal with multiple environments ?
I'm used to have a development, a staging and a production environment.
In dev for example, I want to use S3 in staging and prod but not in dev.
Is there any convention/approach in this field ?

I use migrations, Vlad the deployer and Rails.env everyday in ruby/rails
and I wonder how to tackle them in Smalltalk/Seaside...

Thanks,
Francois

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside application deployment/migration/update

fstephany
> Hi the seaside admistrator app  has a tool to upload a mcz with a new version and save the image or you can update a package from a monticello repository via RFB or Screen shot tools.

I'm not that found of a GUI tool to administrate a server. Doesnt RFB
add too much bloat ?

Is there any command line tool to do that ?

> Whe you talk about change, how long are that changes. ? Is The new model incompatibe with the older.?
> Remember when you change the class structure, the compiler make the changes for all instances.

But what happens to your existing data ? I know that I should store data
in a separate database but for the sake of simplicity I prefer to keep
my objects in the image while there are not too many data (the
application I have in mind is pretty simple concerning storage).

> But that not enogh. You can persist the data in a chunck and recover late.

So basically I could just serialize my data, throw the image and reload
the data in a new fresh image ?

What do people generally do ?

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside application deployment/migration/update

Robert Sirois
In reply to this post by fstephany
Version uploader in tools is probably the easiest way to go. If you change something in your model such as deleting a variable, then that data goes away.. otherwise you can add on all you want.

If you want to make a major change, you would want to merge the data to your new objects somehow.

RS

Francois Stephany <[hidden email]> wrote:

>> Hi the seaside admistrator app  has a tool to upload a mcz with a new version and save the image or you can update a package from a monticello repository via RFB or Screen shot tools.
>
>I'm not that found of a GUI tool to administrate a server. Doesnt RFB
>add too much bloat ?
>
>Is there any command line tool to do that ?
>
>> Whe you talk about change, how long are that changes. ? Is The new model incompatibe with the older.?
>> Remember when you change the class structure, the compiler make the changes for all instances.
>
>But what happens to your existing data ? I know that I should store data
>in a separate database but for the sake of simplicity I prefer to keep
>my objects in the image while there are not too many data (the
>application I have in mind is pretty simple concerning storage).
>
>> But that not enogh. You can persist the data in a chunck and recover late.
>
>So basically I could just serialize my data, throw the image and reload
>the data in a new fresh image ?
>
>What do people generally do ?
>
>_______________________________________________
>seaside mailing list
>[hidden email]
>http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside application deployment/migration/update

EstebanLM
well... I added a button on status app to "upgrade application X" and it upgrades a full metacello configuration :)

Cheers,
Esteban

El 03/05/2011, a las 8:37p.m., Robert Sirois escribió:

> Version uploader in tools is probably the easiest way to go. If you change something in your model such as deleting a variable, then that data goes away.. otherwise you can add on all you want.
>
> If you want to make a major change, you would want to merge the data to your new objects somehow.
>
> RS
>
> Francois Stephany <[hidden email]> wrote:
>
>>> Hi the seaside admistrator app  has a tool to upload a mcz with a new version and save the image or you can update a package from a monticello repository via RFB or Screen shot tools.
>>
>> I'm not that found of a GUI tool to administrate a server. Doesnt RFB
>> add too much bloat ?
>>
>> Is there any command line tool to do that ?
>>
>>> Whe you talk about change, how long are that changes. ? Is The new model incompatibe with the older.?
>>> Remember when you change the class structure, the compiler make the changes for all instances.
>>
>> But what happens to your existing data ? I know that I should store data
>> in a separate database but for the sake of simplicity I prefer to keep
>> my objects in the image while there are not too many data (the
>> application I have in mind is pretty simple concerning storage).
>>
>>> But that not enogh. You can persist the data in a chunck and recover late.
>>
>> So basically I could just serialize my data, throw the image and reload
>> the data in a new fresh image ?
>>
>> What do people generally do ?
>>
>> _______________________________________________
>> seaside mailing list
>> [hidden email]
>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>
> _______________________________________________
> seaside mailing list
> [hidden email]
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside application deployment/migration/update

SeanTAllen
In reply to this post by fstephany

An other problem for me is how do you deal with multiple environments ? I'm used to have a development, a staging and a production environment. In dev for example, I want to use S3 in staging and prod but not in dev. Is there any convention/approach in this field ?


We did development in a virtual machine that had dns setup to route external services back on itself, for stuff like email etc.
With s3, we had it setup under our own domain and mapped over to s3 in production. In development, it just mapped back
to an nginx server that would serve the assets as needed.

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside application deployment/migration/update

Sven Van Caekenberghe
In reply to this post by EstebanLM

On 04 May 2011, at 02:10, Esteban Lorenzano wrote:

> well... I added a button on status app to "upgrade application X" and it upgrades a full metacello configuration :)

Indeed, you can go a long way using just the built in Seaside tools, loading packages, saving images, browsing, debugging, inspecting and changing code, almost like using a regular images, just a bit slower (and remote through a web browser). This is actually quite cool and powerful. Just make sure to set up at least password protection.

On the other hand, this really only works for single image deploys.

When you go to (stateful) load balancing with multiple images, the best strategy is to automatically build your own images. Then Smalltalk is a again much more similar to traditional environments, you just get your code from Monticello repositories. You will have to do a bit of shell scripting and a bit of unix voodoo.

Regards,

Sven

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside application deployment/migration/update

Diogenes Moreira
In reply to this post by fstephany
My answer in line,
Best
D.

On Tue, May 3, 2011 at 7:41 PM, Francois Stephany
<[hidden email]> wrote:
>> Hi the seaside admistrator app  has a tool to upload a mcz with a new
>> version and save the image or you can update a package from a monticello
>> repository via RFB or Screen shot tools.
>
> I'm not that found of a GUI tool to administrate a server. Doesnt RFB add
> too much bloat ?

http://<yoururl>:<yourport>/tools/versionuploader,

>
> Is there any command line tool to do that ?
>

depends on your environment, where are seaside running?  pharo,
squeak, Gemstone, VW, dolphin..?

>> Whe you talk about change, how long are that changes. ? Is The new model
>> incompatibe with the older.?
>> Remember when you change the class structure, the compiler make the
>> changes for all instances.
>
> But what happens to your existing data ? I know that I should store data in
> a separate database but for the sake of simplicity I prefer to keep my
> objects in the image while there are not too many data (the application I
> have in mind is pretty simple concerning storage).
>

good, when you apply the changes on the image, you changes are
applying in all instance of your objects..if that modifications has
incompatible changes, (I can guess, change a simple instance by a
collection, or some thing like that), may be you needed do a script,
to make a intermediate state. and run that script by seaside object
inspector, by example.

>> But that not enogh. You can persist the data in a chunck and recover late.
>
> So basically I could just serialize my data, throw the image and reload the
> data in a new fresh image ?
>

Yeap, if you changes are, very large

> What do people generally do ?
>

In my case, when I work with pharo (in most cases), I use the
monticello's way. I don't have so much experince in gemstone, but
genstome has a object version's system and you need change the
instances structure explicitly
> _______________________________________________
> seaside mailing list
> [hidden email]
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside application deployment/migration/update

fstephany
In reply to this post by Sven Van Caekenberghe
I'll go with the Seaside tools.

Thanks all for your answers :)

> Indeed, you can go a long way using just the built in Seaside tools, loading packages, saving images, browsing, debugging, inspecting and changing code, almost like using a regular images, just a bit slower (and remote through a web browser). This is actually quite cool and powerful. Just make sure to set up at least password protection.

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside application deployment/migration/update

Nick
Hi Francois,

As you mentioned S3, you might like to investigate #resourceUrl: and the "Resource Base Url" setting in the /config app see: http://book.seaside.st/book/in-action/serving-files/images

WAExternalFileLibrary - is also really useful during development when you're working through multiple iterations of external style sheets and image file.  

I run Pharo on my Amazon EC2 instances and use X11 forwarding through SSH so I don't have to install a complete graphical environment on my server, yet achieve acceptable performance when administering a remote image.  
See Ramon's blog entry: http://onsmalltalk.com/2010-10-23-faster-remote-gemstone (Ubuntu), and http://nickager.com/blog/Installing-Gemstone-on-an-Amazon-EC2-Linux-instance/ (for Amazon EC2 Linux based image - scroll to "Configuring GemTools"). 
Note both these blog entries discuss Gemtools and Gemstone, but should work equally well for a recent Pharo installation.

Nick



_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside application deployment/migration/update

Stephan Eggermont-3
In reply to this post by fstephany
Francois wrote:
>How do you update your code and deal with model changes ?

We develop in Pharo and run production in Gemstone.

We started just scp-ing the monticello files and use Gemtools over
remote X on ssh. Some model changes need migration scripts,
but automigrate is enough about 70% of the iterations.

We then moved to a combination of puppet (no server) and git,
bash scripts, monticello files, gofer, and topaz scripts. Some patches
we do directly with Gemtools.

We are now moving to jenkins, vagrant and chef.

Stephan
_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside application deployment/migration/update

patmaddox
On May 4, 2011, at 2:12 PM, Stephan Eggermont wrote:

> Francois wrote:
>> How do you update your code and deal with model changes ?
>
> We develop in Pharo and run production in Gemstone.
>
> We started just scp-ing the monticello files and use Gemtools over
> remote X on ssh. Some model changes need migration scripts,
> but automigrate is enough about 70% of the iterations.
>
> We then moved to a combination of puppet (no server) and git,
> bash scripts, monticello files, gofer, and topaz scripts. Some patches
> we do directly with Gemtools.
>
> We are now moving to jenkins, vagrant and chef.

What do those migration scripts look like? When do you run them in the deploy process? When do you write the migration scripts? How do you test them?

Cheers,
Pat
_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside application deployment/migration/update

Nick
In reply to this post by Stephan Eggermont-3
Hi Stephen,


We are now moving to jenkins, vagrant and chef.

I'm very interested in scripting my Gemstone EC2 configuration - see http://nickager.com/blog/Installing-Gemstone-on-an-Amazon-EC2-Linux-instance/ 

It looks like that is something that could be scripted with chef http://www.opscode.com/chef/

In case you're doing something similar I'd be very interested in collaborating.

Nick

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside