2011-01-25 17 views
5

Bu, sahip olduğum bir Apache/Perl sorunudur.Perl CGI Komut dosyaları kitaplıkta modül bulamıyor

benim perl CGI uygulamasında CPAN Modülü kullanıyorum. Ben tar.gz dosyaları ile cpan modülü yüklü Çizelge :: ParseExcel

olduğunu.

Bağımlılıkları yükledim. Ancak, root olmayan bir kullanıcı olarak yaptım. bu dosyaları içeren kütüphane kullanıcı klasörü/home/kullanıcı/lib Şimdi, başarılı bir şekilde bu kutuyu Apache2 yapılandırmış

altındadır. Html dizini/var/www/html'dir ve cgi klasörü/var/www/html/cgi-bin'tir. Çalıştığını doğruladım çünkü bu klasördeki tüm komut dosyaları özel modülleri gerektirmemekte, yani firefox tarayıcımda çalışmaktadır. merhaba dünya, veri dökümleri, basit formlar. Ben "E-tablo :: ParseExcel" kullanmak komut dosyalarını çalıştırmayı denediğinizde

Ancak, ben modül @ INC bulunabilir olamaz hatası alıyorum. Ancak, kitaplığı ekleyen komut dosyasının başında "lib kullan" deyim var.

Komut dosyaları sorunsuz PUTTY olarak çalıştırılabilir. Yalnızca komut dosyasını tarayıcıdan çalıştırırken sorunu anlayabiliyorum.

Bu web uygulaması

başka bir kutu üzerinde yazılı ve o kutuda çalışıyor edildi. Çünkü oraya geliştim. Apache2'yi kişisel Ubuntu makinem üzerine koydum ve web uygulamasını ve modülleri buraya yükledim ve yerel kutumda çalışıyor.

Ben belirledik "chmod -R a + rx" kullanıcı kütüphanesi klasörüne, bu yüzden Apache üst dizinin ayarlarını bunu engelledi sürece klasöre erişimi olduğunu düşünürsünüz? Bunu/home/user klasöründe veya daha kötüsü/home klasöründe çalıştırmak zorunda değilim, değil mi?

Sorunla ilgili herhangi bir bilgi var mı?

Zaman ayırdığınız için hepinize teşekkür ederiz! Burada

cevap

1

İki düşünceler:

  1. o modülleri eksik hakkında hata diyor @INC nedir, bu use lib ile eklenmiş yolunu içerir?
  2. Apache'nin bu dizine erişimi olan kullanıcı çalıştırıyor mu? Çoğu zaman ev dizinlerinde diğer hesapların geçişini engelleyen izinler vardır. Modül dizinindeki izinleri sonuna kadar kontrol edin, tüm dizinler ve dosyalar için modülünüzde en az r-x değerine sahip olduğundan emin olun.
+0

@INC hatasının listelenen ilk dizini, söz konusu kitaplık dizinidir. Hangi kullanıcı apache'nin 'nobody' veya 'www-user' dosyalarına erişmeye çalıştığını bilmiyorum, ancak bir izin sorununa eğiyorum. Evet, tüm kitaplık sahibi, grubu ve kullanıcıları için r-x izinlerine sahiptir. – bleutyler

+0

Sadece modülün dizini değil. Örneğin, eğer modül /home/tydel/lib/perl/Net/BoogieTime.pm ise,/up dizinindeki her dizin en azından o + rx gerektirir.Bu/home,/home/tydel,/home/tydel/lib ve/home/tydel/lib/perl,/home/tydel/lib/perl/Net ve son/ev/tydel/lib/perl/Net içerir /BoogieTime.pm, o + r'ye ihtiyaç duyacaktır. Umarım yardımcı olur. –

3

/home/user/lib üzerindeki izinler ona erişmesine izin verse bile, Apache kullanıcısı/home/user'ye erişemezse/home/user/lib dosyasına erişemez. Örneğin,/root'da bir dosyaya sahipseniz,/root'a erişiminiz yoksa, yine de erişemiyorsunuzdur.

+0

Aha, anladım. Bunu işaret ettiğin için teşekkürler. Bu nedenle,/usr/local/lib gibi bir şeyde perl modülleri için kütüphane koymak daha iyi olmalı! – bleutyler

+0

@ user589905: ... ya da sadece/home/user/'dünyaca okunabilir/dünya-çalıştırılabilir (drwxr-xr-x'). Vakaların büyük çoğunluğunda, ev dizininizdeki verileri paylaşma yeteneği, her şeyi orada tamamen gizli kılmaktan çok daha önemlidir (özellikle de hassas olan verilerin genellikle küçük bir miktarı için özel bir alt dizin oluşturabileceğiniz için). –

+0

Benzer bir sorunla karşı karşıyayım, bu çözüm sizin için işe yaradı, çünkü benim için yapmadı. Tüm klasör izni, kullanıcı erişimi için kontrol ettim ama hala bu sorunla karşı karşıyayım. –