2010-08-17 12 views
6

मुझे हाल ही में पता चला है कि सीजीआई स्क्रिप्ट को किसी भी भाषा में लिखा जा सकता है जो stdout पर प्रिंट कर सकता है। मैं अपने साझा मेजबान पर एक छोटे से छल cgi स्क्रिप्ट है कि स्थापित अपने स्थानीय अपाचे पर काम करता है लिखा है, लेकिन नहीं:गुइल योजना और सीजीआई?

#!/usr/local/bin/guile -s 
!# 
(display "Content-Type: text/html") 
(newline) 
(newline) 
(display "hi") 
(newline) 

यह वह जगह है उत्पादन, जब मैं ssh पर मेरे मेजबान पर एक खोल से स्क्रिप्ट चलाने:

$ ./scheme.cgi 
Content-Type: text/html 

hi 

तो, जाहिर है कि मेरे होस्ट ने गुइल स्थापित किया है। हालांकि, जब मैं ब्राउज़र में इस फ़ाइल तक पहुंचने का प्रयास करता हूं, तो मुझे "500 आंतरिक सर्वर त्रुटि" मिलती है। जब मेरी त्रुटि लॉग को देखते हुए, मुझे लगता है कि मैं खूंखार "स्क्रिप्ट हेडर के समय से पहले अंत" हो रही है त्रुटि:

[server.com] [Tue Aug 17 00:54:19 2010] [error] [client xx.xx.xx.xxx] (2)No such file or directory: 
exec of '/home/www/vhosts/jcw.geekisp.com/cgi-bin/scheme.cgi' failed 

[server.com] [Tue Aug 17 00:54:19 2010] [error] [client xx.xx.xx.xxx] Premature end 
of script headers: scheme.cgi 

क्योंकि मैं एक साझा मेजबान पर हूँ, mod_lisp या छल के FastCGI कार्यान्वयन का उपयोग सवाल से बाहर हैं । कहा जा रहा है, यहां क्या मुद्दा हो सकता है? इसी तरह की सीजीआई स्क्रिप्ट्स जिन्हें मैंने पाइथन, पर्ल, रूबी, और एस में बिना किसी त्रुटि के सर्वर पर लिखा है। मुझे लगता है कि होस्ट पर 1.8.7 गुमराह स्थापित है, लेकिन मेरी स्थानीय मशीन नवीनतम संस्करण पर है।

मैं समझता हूं कि यह एक अविश्वसनीय रूप से विशिष्ट सवाल है, किसी भी मदद की सराहना की जाएगी!

उत्तर

6

आप अपनी खुद की प्रतिलिपि संकलित करने में सक्षम हो सकते हैं या क्या नहीं कर सकते हैं और इसे अपने ~/bin/निर्देशिका में संग्रहीत कर सकते हैं और स्क्रिप्ट्स को वहां इंगित कर सकते हैं।

+0

उत्कृष्ट विचार, धन्यवाद! – jcw

+0

मैंने हाल ही में सीजीआई कार्यक्रम चलाने के लिए अपने मेजबान पर काम करने के लिए इस विधि का उपयोग किया। मैंने LD_LIBRARY_PATH और GUILE_LOAD_PATH को सही तरीके से स्थापित करने के लिए एक छोटी शेल स्क्रिप्ट (जिसे CGI प्रोग्राम चलाया) बनाया है। – gcbenison

4

मेरा मानना ​​है कि त्रुटि का मतलब है कि आपकी वेब सर्वर प्रक्रिया के पास /usr/local/bin/guile दुभाषिया तक पहुंच नहीं है। उस फ़ाइल पर अनुमतियों की जांच करें, सुनिश्चित करें कि यह सर्वर पहुंच योग्य है यदि सर्वर क्रोट में या अनिवार्य पहुंच नियंत्रण आदि के अंतर्गत चलता है और जब आप इसमें हों तो अपनी स्क्रिप्ट पर अनुमतियों को दोबारा जांचें।

+0

मैंने पहली पंक्ति "#!/Usr/bin/env guile" में बदल दी है, और मुझे एक ही त्रुटि मिल रही है। गुइल बाइनरी में वही अनुमतियां होती हैं जैसे कि पाइथन और रूबी बाइनरी, ओ + डब्ल्यू को छोड़कर इसके बगल में बैठी होती है (और इसका समूह पहिया के बजाए बिन है)। मुझे chroot करने की अनुमति नहीं है। स्क्रिप्ट की अनुमतियां 755 हैं। – jcw

1

ऐसा लगता है कि,/usr/स्थानीय/बिन निर्देशिका जब मैं सर्वर पर ssh'ed रहा हूँ मौजूद है कि/usr/स्थानीय/बिन से अलग है जब स्क्रिप्ट सेवा की है और एक ब्राउज़र के माध्यम से पहुँचा रहा है। मुझे पता चला कि क्या व्याख्याकार इस CGI स्क्रिप्ट के माध्यम से उपलब्ध थे:

#!/bin/sh 
echo "Content type: text/html\r\n\r\n" 
echo "ls /usr/local/bin" 

जब मैं एक ब्राउज़र के माध्यम से इस स्क्रिप्ट भाग गया, मैंने पाया कि mzscheme में सूचीबद्ध किया गया है, लेकिन छल नहीं। तो, समस्या हल हो गई, मैं mzscheme का उपयोग कर रहा हूँ।

धन्यवाद, कार्ल।

संबंधित मुद्दे