2008-11-04 10 views
64

Ich habe die Aufgabe, eine Produktionsumgebung zu replizieren, um viele Test/Sit-Umgebungen zu erstellen.Wie kann ich eine bestimmte Version einer Reihe von Perl-Modulen installieren?

Eines der Dinge, die ich tun muss, ist Perl aufzubauen, mit all den Modulen, die im Laufe der Jahre installiert wurden (einschließlich interner und externer Module). Ich könnte einfach CPAN.pm Autobundle verwenden, aber dies wird dazu führen, dass die Testumgebung viel neuere Versionen der externen Module hat, die die Produktion hat.

Was ist der einfachste/beste Weg, um (viele) versionsspezifische Perl-Module zu bekommen und zu installieren.

Antwort

36

Machen Sie Ihren eigenen CPAN Spiegel mit genau was Sie wollen. Stratopan.com, ein Service, und Pinto, Tools, die auf der Spitze gebaut ist, können Ihnen dabei helfen.

Die CPAN-Tools installieren nur die neueste Version einer beliebigen Distribution, da PAUSE nur die neueste Version indiziert. Sie können jedoch Ihr eigenes privates CPAN erstellen, das genau die gewünschten Distributionen aufweist. Sobald Sie Ihren eigenen CPAN-Mirror mit den von Ihnen gewünschten Funktionen haben, richten Sie Ihre CPAN-Tools nur auf diesen Mirror, damit nur diese Versionen installiert werden. Mehr dazu in einer Minute.

Nun möchten Sie mehrere Versionen davon haben. Sie können so viele Spiegel erstellen, wie Sie möchten, und Sie können die Spiegel auch in die Quellcodeverwaltung einfügen, um eine beliebige Version des Spiegels auszuchecken.

Tools wie CPAN :: Mini :: Inject können Ihnen bei der Einrichtung Ihres eigenen CPAN helfen. Check out my talks on Slideshare für die grundlegenden Beispiele, und einige der my videos on Vimeo für einige der Demonstrationen. Sieh dir alles an, das im Titel "CPAN" oder "BackPAN" hat. Ich denke, ich könnte auch ein paar Sachen in The Perl Review haben, oder sollte bei der nächsten Ausgabe. :)

In letzter Zeit habe ich an einem Programm namens dpan (für DarkPAN) gearbeitet, das nach beliebigen Verzeichnissen suchen, Perl-Distributionen in ihnen finden und die Struktur- und Indexdateien erstellen kann, die Sie benötigen. Wenn Sie dpan ausführen, erhalten Sie eine URL, auf die Sie Ihren CPAN-Client verweisen können. Es ist Teil meines MyCPAN-Indexer-Projekts, das in Github ist. Es ist nicht bereit für die unbeaufsichtigte öffentliche Nutzung, da ich hauptsächlich mit Firmenkunden arbeite, um ihr Setup anzupassen. Wenn Sie daran interessiert sind, können Sie mir gerne Fragen stellen.

Außerdem habe ich kürzlich CPAN::PackageDetails freigegeben, die Ihnen helfen können, die richtige Indexdatei zu erstellen. Es ist immer noch ein bisschen jung, aber wenn Sie etwas besonderes brauchen, fragen Sie einfach.

+1

Danke Brian, ich bin gerade dabei, einen lokalen Mini-cpan aufzubauen, ich werde dann in unsere lokalen Module + die einspeisen, die ich auf bestimmte Versionen heruntergestuft habe. –

101

bdfoy hat die beste große Lösung, aber wenn Sie nur ein paar Module installieren möchten, können Sie die CPAN-Shell bitten, eine bestimmte Distribution zu installieren, indem Sie auf einen Pfad zu einem Tarball verweisen (relativ zum Anfang des CPAN-Baums) .

cpan> install MSCHWERN/Test-Simple-0.62.tar.gz 

eine URL BackPAN in die URL-Liste werfen und Sie können eine ältere Version installieren.

cpan> o conf urllist push http://backpan.perl.org/ 

Diese im CPAN.pm FAQ unter „Wie installiere ich einen‚DEVELOPER RELEASE‘einen Moduls?“

+0

Schön. Dadurch kann ich ein Kompatibilitätsproblem mit einem Server umgehen, den ich noch nicht upgraden kann. Vielen Dank! –

+0

ich glaube nicht, dass URL in diesen Tagen funktioniert. das tut, obwohl: http://backpan.perl.org/ – flamey

+0

'installieren MSCHWERN/Test-Simple-0.62.tar.gz' @Swern Ich denke, Sie müssen das MS-Präfix abholen, um zu bekommen es zu finden, die Tarball –

7

[Es ist fast fünf Jahre später und dies ist eine gut gestellte und gut beantwortete Frage, die viele Ansichten hatte. Da diese Seite bei Google-Suchen immer noch auftauchen muss, kann ein Update nicht schaden.]

Carton ist hier erwähnenswert.Carton ist ein relativ neues Werkzeug in der gleichen Art wie App::cpanminus, App::cpanoutdated, perlbrew, et. al. Der Autor (Miyagawa) nennt es "Alpha" Qualität, aber selbst in seinem aktuellen Zustand hilft Karton die Wartung mehrerer Umgebungen von versionsabstimmten Modulen auf Maschinen zu vereinfachen.

Pinto Auch ist ein anderes aktuelles Werkzeug, das für einige der Antworten relevant ist (tatsächlich ist einer der Befragten ein Mitwirkender).

4

Stratopan.com ist eine andere Alternative. Stratopan stellt private CPANs in der Cloud bereit. Sie können Ihr Stratopan-Repository mit bestimmten Versionen von Modulen (und deren Abhängigkeiten) füllen und sie dann mit der Standard-Perl-Toolkette installieren. Das Repository ändert sich nur, wenn Sie entscheiden, es zu ändern, so erhalten Sie immer die Versionen der Module, die Sie möchten.

Haftungsausschluss: Ich betreibe Stratopan.

14
cpan install App::cpanminus 
cpanm Your::[email protected] 

(Carton, wie in anderen Antworten verwiesen, cpanm unter verwendet explizite Version Anforderungen zu lösen.)

+0

Dies ist eine großartige Antwort für speziell, wie man eine ** spezifische Version von ** einem ** Perl-Modul installiert "(wie die Frage an einem Punkt erschien). Vor allem, wenn Sie bereits cpanm verwenden. – Randall

2

Es scheint, dass ein cpanfile Erstellen all Module Auflisten und gewünschte Versionen (mit der == <version> Syntax Sperren Sie es auf eine bestimmte Version) könnte auch hier gut dienen. Das würde bedeuten, Carton oder cpanm für die Installation der Module zu verwenden.

Dies hätte den Vorteil, dass Sie die Datei schnell und einfach optimieren können, um die Aktualisierung bestimmter Module in einer Entwicklungs- oder Staging-Umgebung zu testen - etwas, das Sie mit einem privaten CPAN-Spiegel nicht tun würden (ohne mehrere Spiegelungen zu erstellen). .