2010-09-25 34 views
15

Tôi đã và đang sử dụng perlbrew để quản lý nhiều phiên bản perl trên máy tính xách tay Linux Fedora. Tôi đã sử dụng nó với lợi ích to lớn để chạy các dòng lệnh chủ yếu bằng cách sử dụng App::cmd.Làm thế nào để sử dụng perlbrew để quản lý cài đặt perl nhằm vào các ứng dụng web?

Bây giờ tôi muốn chuyển sang chạy các ứng dụng web được viết bằng cách sử dụng CGI::Application sử dụng các lọn tóc khác nhau được cài đặt trong $HOME của tôi. Tôi quen thuộc với việc chạy các ứng dụng web Perl trong $HOME s bằng cách sử dụng Apache user_dir hoặc tạo Máy chủ ảo nhưng tôi không thể đưa ra một cách sạch sẽ để tích hợp điều này và perlbrew được quản lý perls. Cụ thể là tôi cần trợ giúp trong việc tìm hiểu và tìm câu trả lời cho những câu hỏi sau:

  1. Làm thế nào để cài đặt mod_perl dưới perlbrew?
  2. Giả sử điều này được thực hiện, làm thế nào để cấu hình VirtualHost của tôi để nó chọn đúng perl hiện tại?
  3. Nếu điều này là không thể, (mà tôi nghi ngờ) tôi có thể ít nhất sử dụng cài đặt cục bộ để chạy vanilla CGI?

Cảm ơn sự quan tâm của bạn.

Trả lời

16

Tôi không nghĩ đây là một cách sử dụng tốt cho perlbrew, di chuyển quanh các liên kết tượng trưng trong thư mục riêng của nó. Bí quyết đang chuyển đổi mô-đun mod_perl xung quanh. Hãy nhớ rằng, mod_perl sẽ không tương thích nhị phân giữa các phiên bản chính của perl và bạn sẽ phải biên dịch nó dựa trên apache cho mỗi phiên bản của perl (và apache) mà bạn muốn sử dụng.

perlbrew thực sự thực hiện hai việc lớn cho bạn:

  • Cài đặt perl, đó là trivially dễ dàng để làm trên của riêng bạn.
  • Chuyển xung quanh các liên kết tượng trưng để perl là bất kỳ phiên bản nào bạn muốn.

Nếu bạn bỏ cuộc cuối cùng, perlbrew không thực sự làm được điều đó nhiều cho bạn. Tôi không nghĩ rằng tính năng liên kết tượng trưng đặc biệt có giá trị.

Tôi nghĩ rằng perlbrew là tốt cho những gì nó được, nhưng khi bạn bắt đầu làm những việc bên ngoài phạm vi hạn chế của nó, đó là thời gian để không sử dụng nó. Nó được coi là một công cụ để giúp bạn tiết kiệm thời gian và đau đầu, vì vậy nếu nó không hoàn thành mục tiêu đó, nó không phải là công cụ phù hợp với hoàn cảnh của bạn.

Trong trường hợp này, nơi tôi đang hỗ trợ một ứng dụng web lớn, duy nhất, tôi cung cấp cho nó cài đặt perl riêng của mình mà tôi không cho phép bất kỳ điều gì khác sử dụng.

Đối với các câu hỏi khác của bạn:

  1. markdown placeholder

  2. Bạn không cần phải cấu hình bất kỳ thứ VirtualHost. Nếu bạn đang sử dụng mod_perl, perl đã có trong đó và bạn không nhận được để chọn một perl. Nếu bạn đang sử dụng công cụ CGI, bạn chỉ định perl trên dòng shebang. Bạn sẽ phải đảm bảo apache chọn lên thư mục đúng thư viện, nhưng tôi nghĩ rằng perlbrew xử lý đó. Bạn có thể phải sử dụng SetEnv hoặc một cái gì đó tương tự trong httpd.conf của bạn.

  3. Đối với vanilla CGI, chỉ cần trỏ đến bên phải (đường dẫn liên kết) cho bất kỳ phiên bản perlbrew mặc định nào. Các chương trình CGI sẽ chỉ sử dụng bất cứ điều gì perl mà con đường trỏ đến.

9

Xem câu trả lời của brian d foy về lý do tại sao không mong đợi sử dụng perlbrew để chuyển đổi giữa các phiên bản của mod_perl. Tôi cũng hy vọng rằng bạn sẽ cần phải chạy nhiều máy chủ Apache, nếu bạn cần nhiều phiên bản Perl khác nhau theo mod_perl.

Tuy nhiên, sử dụng perlbrew như một cách dễ dàng để xây dựng Perl là IMHO một điều hợp lệ để làm, và có vài hướng dẫn có sẵn để làm thế nào để chạy mod_perl dưới perlbrew.

Đầu tiên đảm bảo perl được xây dựng với sự hỗ trợ thư viện chia sẻ, bằng cách thông qua các cờ -Duseshrplib (nếu không trên các hệ thống 64-bit, bạn sẽ nhận được một build thất bại khó hiểu về -fPIC):

perlbrew install perl-5.16.3 -Duseshrplib 

Cài đặt sự phát triển Apache thư viện cho hệ thống của bạn. Trên Debian, điều này khác nhau tùy thuộc vào Apache MPM mà bạn đang sử dụng. Đối với MPM prefork:

sudo apt-get install apache2-prefork-dev 

Hoặc cho MPM công nhân:

sudo apt-get install apache2-threaded-dev 

Sau đó, bạn cần một số tùy chọn để xây dựng và cài đặt mod_perl2 vào đúng nơi. Lưu ý rằng điều này có nghĩa là cpanm sẽ không xây dựng được nó, nhưng bạn có thể sử dụng nó để có được mã nguồn:

cpanm mod_perl2 # fails 
cd ~/.cpanm/latest-build/mod_perl-2.0.8/ # adjust mod_perl version 

Điều chỉnh phiên bản của Perl dưới đây cho phù hợp. (Tùy chọn MP_APXS là để cho con đường đúng đắn cho các hệ thống nền tảng Debian, mà bạn có thể không cần.)

perl Makefile.PL MP_APXS=/usr/bin/apxs2 \ 
       MP_AP_DESTDIR=$HOME/perl5/perlbrew/perls/perl-5.16.3/ 
make 
make install 

Cuối cùng, thay đổi dòng LoadModule trong file cấu hình Apache của bạn (điều chỉnh đường dẫn cho phù hợp):

LoadModule perl_module <your homedir>/perl5/perlbrew/perls/<your perl>/usr/lib/apache2/modules/mod_perl.so 

Cài đặt mod_perl của bạn hiện sẽ chạy phiên bản Perl mà bạn muốn. Cài đặt tất cả các mô-đun CPAN yêu cầu của bạn và bắt đầu.

+0

Đây có vẻ là giải pháp duy nhất để quản lý các phiên bản Perl và mod_perl khác nhau bằng cách sử dụng perlbrow trong Apache. Hãy coi chừng ... nếu cá thể Apache của bạn đang chạy với tư cách người dùng khác thì bạn cần phải cài đặt Perl cục bộ có thể truy cập được cho người dùng này. Tôi đã làm điều này trong cài đặt thử nghiệm của tôi với "chmod 777 -R ./" từ thư mục chính của người dùng nơi cài đặt perlbrew. –

Các vấn đề liên quan