Re: [Catalyst] How to use local::lib

2009-06-23 Thread Dave Rolsky

On Tue, 23 Jun 2009, Tobias Kremer wrote:


Cool, but what I really meant to ask was: Is it possible to require a
specific version in your Makefile.PL and have only this version
installed during "make installdeps"? :) This would possibly solve most
of the CPAN-related deployment problems.


FWIW, Module::Build does support this sort of specificity:

  prereqs => { 'Test::More', '== 0.55',
   'Moose',  '> 0.81, != 0.82',
 }


-dave

/*
http://VegGuide.org   http://blog.urth.org
Your guide to all that's veg  House Absolute(ly Pointless)
*/

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] How to use local::lib

2009-06-23 Thread Tomas Doran


On 23 Jun 2009, at 09:41, Tobias Kremer wrote:
Developers can then use what they like (and whatever OS/versions  
of modules)
they want, if they want to install the app locally, but that's  
unsupported.
I'd also make a 'production like' (i.e. same OS) vmware machine  
available
with the 'standard' dependencies - all of your developers should  
be given

enough horsepower to run vmware, problem solved.


Yes, that'd be possible. Nevertheless, it would be nice if you could
bring up a new development box with "make installdeps" that "just
works" because it has the right module versions installed and not some
new, probably incompatible version.


Aha, well, the obvious correct solution to that is to spin up and  
install your environment dependencies with the latest CPAN  
$everything on a nightly basis, and run your smoke tests, then yell  
at CPAN authors whos newer module broke your code..


If you're not doing something similar (even if more informally), then  
you can get into big issues in a couple of years trying to reuse any  
modern code (or upgrade something due to a bug) - it has newer  
dependencies, and you can't upgrade, and suddenly you're in a nasty  
place...


I totally appreciate the need to have a 'known environment' for  
production, but at least testing newer CPAN releases automatically is  
very worthwhile..



Cool, but what I really meant to ask was: Is it possible to require a
specific version in your Makefile.PL and have only this version
installed during "make installdeps"? :) This would possibly solve most
of the CPAN-related deployment problems.


No, unfortunately it isn't..

Cheers
t0m


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] How to use local::lib

2009-06-23 Thread Tobias Kremer
On Tue, Jun 23, 2009 at 10:26 AM, Tomas Doran wrote:
> I think you need a better separation between development and staging. If
> you're not running something production like in staging, then IMO you're
> really screwed.

Actually, we do :)

> Developers can then use what they like (and whatever OS/versions of modules)
> they want, if they want to install the app locally, but that's unsupported.
> I'd also make a 'production like' (i.e. same OS) vmware machine available
> with the 'standard' dependencies - all of your developers should be given
> enough horsepower to run vmware, problem solved.

Yes, that'd be possible. Nevertheless, it would be nice if you could
bring up a new development box with "make installdeps" that "just
works" because it has the right module versions installed and not some
new, probably incompatible version.

>> By the way: Would it theoretically be possible to install specific
>> versions of a CPAN distribution? Is there possibly already work
>> underway to achieve this? I think that this would really solve a lot
>> of deployment trouble ...
> Erm, it's already practically possible. You just need to ask the CPAN shell
> for a specific revision.

Cool, but what I really meant to ask was: Is it possible to require a
specific version in your Makefile.PL and have only this version
installed during "make installdeps"? :) This would possibly solve most
of the CPAN-related deployment problems.

> At work I debian package everything. But you're still going to make one
> package per dependency per platform.
> That's a lot of work.. And it totally precludes having different
> applications with different versions of the same module on the same machine.

I tried that with Catalyst::Runtime a couple of weeks ago and it still hurts :)

Thanks for your help!

--Tobias

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] How to use local::lib

2009-06-23 Thread Tomas Doran


On 23 Jun 2009, at 08:59, Tobias Kremer wrote:

These things make the local::lib approach a bit more unappealing for
us. For one thing, it appears to be still quite a bit rough around the
edges and I doubt that there's anything I personally could do about it
because my knowledge there is limited. Secondly, we really would like
to have a central repository for our development AND production
systems. What proven alternatives are there if you have developers
working on OS X, Ubuntu etc. and deploy on a different (Debian)
system?


Erm, well, the new --self-contained feature is a little rough round  
the edges, sure.


local::lib itself just works given what it was originally trying to  
accomplish.


I think you need a better separation between development and staging.  
If you're not running something production like in staging, then IMO  
you're really screwed.


Developers can then use what they like (and whatever OS/versions of  
modules) they want, if they want to install the app locally, but  
that's unsupported. I'd also make a 'production like' (i.e. same OS)  
vmware machine available with the 'standard' dependencies - all of  
your developers should be given enough horsepower to run vmware,  
problem solved.



What about CPAN::Mini? At first, it sounds strange to have a whole
copy of the CPAN around (although it's not that big), but then again
it sounds really cool to just "make installdeps" and have everything
installed in the correct version in a cross-platform compatible way.


Yes, you can just point an ftp server at a CPAN::Mini, then set your  
CPAN shell to use that as your CPAN mirror - it'll just work..



By the way: Would it theoretically be possible to install specific
versions of a CPAN distribution? Is there possibly already work
underway to achieve this? I think that this would really solve a lot
of deployment trouble ...


Erm, it's already practically possible. You just need to ask the CPAN  
shell for a specific revision.




So, how are you doing your deployment? :) I believe this is an area
where there's still a lot of homebrew stuff going on and it would be
nice to have one (or 2-3) ways to do it! I'd be willing to write
something up for the wiki if there's enough input.


At work I debian package everything. But you're still going to make  
one package per dependency per platform.


That's a lot of work.. And it totally precludes having different  
applications with different versions of the same module on the same  
machine.


I guess this comes down to how many environments you're prepared to  
'officially' support, and what your constraints are.


Cheers
t0m


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] How to use local::lib

2009-06-23 Thread Tobias Kremer
On Mon, Jun 22, 2009 at 7:04 PM, Tomas Doran wrote:
> On 22 Jun 2009, at 16:43, Tobias Kremer wrote:
>> Am I missing something here or do I really have to checkout my app on
>> a fresh installation with no prerequisites installed and try the above
>> there?
> Yeah, pretty much at the moment. If you install all your prerequisites in a
> local::lib, then if you blank PERL5LIB, then it _just works_.
>> Also, am I right that this method won't work for XS-based modules if
>> I'm building my local_lib, say on a Ubuntu system, while the
>> production system is Debian-based?
> Correct. You'll have to build your local::lib on a system with similar
> architecture to your production boxen.

These things make the local::lib approach a bit more unappealing for
us. For one thing, it appears to be still quite a bit rough around the
edges and I doubt that there's anything I personally could do about it
because my knowledge there is limited. Secondly, we really would like
to have a central repository for our development AND production
systems. What proven alternatives are there if you have developers
working on OS X, Ubuntu etc. and deploy on a different (Debian)
system?

What about CPAN::Mini? At first, it sounds strange to have a whole
copy of the CPAN around (although it's not that big), but then again
it sounds really cool to just "make installdeps" and have everything
installed in the correct version in a cross-platform compatible way.

By the way: Would it theoretically be possible to install specific
versions of a CPAN distribution? Is there possibly already work
underway to achieve this? I think that this would really solve a lot
of deployment trouble ...

So, how are you doing your deployment? :) I believe this is an area
where there's still a lot of homebrew stuff going on and it would be
nice to have one (or 2-3) ways to do it! I'd be willing to write
something up for the wiki if there's enough input.

Thanks a lot!

--Tobias

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] How to use local::lib

2009-06-22 Thread Tomas Doran


On 22 Jun 2009, at 16:43, Tobias Kremer wrote:


After reading about local::lib and thinking that it's too good to be
true, I just had to try it out as a possible deployment method for one
of our apps. I have the app and all dependencies running on my
development box. The prerequisites are specified in my app's
Makefile.PL. Now, after having bootstrapped local::lib, I ran the
following commands - as suggested by t0m in a recent thread - but
nothing happens because all required modules are already installed in
my system-wide CPAN directory in their correct versions:


Yeah, unfortunately, this doesn't work so good unless your  
dependencies have been installed in a local::lib themselves, and you  
can remove this from PERL5LIB


After rambling about 'just do it like this', I then wandered off and  
tried to make the new --self-contained feature of this work. Wasn't  
quite as easy to make it work generically than I'd implied I don't  
think.


$ eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib=--self- 
contained,local_lib)

$ make installdeps

Am I missing something here or do I really have to checkout my app on
a fresh installation with no prerequisites installed and try the above
there?


Yeah, pretty much at the moment. If you install all your  
prerequisites in a local::lib, then if you blank PERL5LIB, then it  
_just works_.


However have a look at:

http://bobtfish.livejournal.com/264777.html
http://github.com/bobtfish/catalyst-app-example-locallibapp/tree/master

This is what I threw together after making that posting, and whilst  
it's not quite all there yet - it will at least install a self  
contained Catalyst & etc.



Also, am I right that this method won't work for XS-based modules if
I'm building my local_lib, say on a Ubuntu system, while the
production system is Debian-based?


Correct. You'll have to build your local::lib on a system with  
similar architecture to your production boxen.


Cheers
t0m


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] How to use local::lib

2009-06-22 Thread Robert Krimen
On Mon, Jun 22, 2009 at 8:43 AM, Tobias Kremer wrote:

> After reading about local::lib and thinking that it's too good to be
> true, I just had to try it out as a possible deployment method for one
> of our apps. I have the app and all dependencies running on my
> development box. The prerequisites are specified in my app's
> Makefile.PL. Now, after having bootstrapped local::lib, I ran the
> following commands - as suggested by t0m in a recent thread - but
> nothing happens because all required modules are already installed in
> my system-wide CPAN directory in their correct versions:
>
> $ eval $(perl -I$HOME/perl5/lib/perl5
> -Mlocal::lib=--self-contained,local_lib)
> $ make installdeps
>
> Am I missing something here or do I really have to checkout my app on
> a fresh installation with no prerequisites installed and try the above
> there?


--self-contained does not work when exporting variables to the environment
because of the way the perl runtime works. Basically perl will always setup
@INC to include
system libraries, regardless of what is in PERL5LIB.

You can try this: PERL5OPT="-Mlocal::lib=--self-contained,local_lib"

(But you may encounter some problems with taint checking)

Rob
___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


[Catalyst] How to use local::lib

2009-06-22 Thread Tobias Kremer
After reading about local::lib and thinking that it's too good to be
true, I just had to try it out as a possible deployment method for one
of our apps. I have the app and all dependencies running on my
development box. The prerequisites are specified in my app's
Makefile.PL. Now, after having bootstrapped local::lib, I ran the
following commands - as suggested by t0m in a recent thread - but
nothing happens because all required modules are already installed in
my system-wide CPAN directory in their correct versions:

$ eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib=--self-contained,local_lib)
$ make installdeps

Am I missing something here or do I really have to checkout my app on
a fresh installation with no prerequisites installed and try the above
there?

Also, am I right that this method won't work for XS-based modules if
I'm building my local_lib, say on a Ubuntu system, while the
production system is Debian-based?

Thanks a lot for any hints!

--Tobias

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/