بالنسبة روبي/webrick أحتاج ويندوز التعرف كوخ (#!) التدوين

StackOverflow https://stackoverflow.com/questions/241341

سؤال

(تتحمل معي ، أعدك أن هذا يحصل كوخ ويندوز.)

لدي حوالي أبسط من WEBRick ملقمات وضع معا:

require 'webrick'
include WEBrick

s = HTTPServer.new(:Port=>2000, :DocumentRoot=>Dir::pwd)
s.start

لا يمكن أن يكون أبسط.هذا الملقم الأساسي لا تقبل http اتصالات (فايرفوكس ، مفجر الإنترنت ، مجلد مشترك ، TELENT) و يتعامل معهم بشكل مناسب ، طالما أنا فقط جلب وثائق ثابتة.ولكن ، إذا كنت في مجموعة واحدة من الملفات في الدليل أن يكون .cgi امتداد احصل على 500 ذهابا التالية على ملقم المحطة الطرفية:

ERROR CGIHandler: c:/rubyCGI/test.cgi: 
C:/...[snip]...webrick/httpservlet/cgi_runner.rb:45: in 'exec': Exec format error - ...[snip]...

لقد فعلت بعض الأشياء على سطر الأوامر إلى تقليد ما يجري في خط 45 من cgi_runner.rb

c:\>ruby
exec "c:/rubyCGI/test.cgi"
^Z
(same error erupts)

c:\>ruby
exec "ruby c:/rubyCGI/test.cgi"
^Z
Content-type: text/html

Mares eat oats and does eat oats and I'll be home for Christmas.

ومن الواضح WEBrick لم يتم السماح للهبوط على ويندوز.الخاص بك الصداع المعتاد من الشركات جنون العظمة يمنعني من تعديل webrick ، لذلك هل يمكنني الحصول على تلك الرموز في c:/rubyCGI/test.cgi معترف بها من قبل نظام التشغيل (ويندوز) لذا لا يجب علي أن أقول صراحة كل الوقت الذي مترجم للاستخدام ؟ لا يمكن تعيين كل شيء .cgi الملفات المرتبطة روبي, لكن هذا سيكون الحد في المدى الطويل.

تحديث:منذ نشر هذا, فقد خطر لي أنه قد لا يكون ممكنا في جميع لتشغيل cgi ملقم ويب من روبي;روبي لا التفرع الدعم.مع عدم القدرة على مفترق عملية cgi الخادم أن تنفيذ كل برنامج نصي cgi واحد في وقت واحد ، إهمال جميع الطلبات المتزامنة في حين أن الأول أكمل.في حين أن هذا قد يكون مقبولا بالنسبة لبعض, انها لن تعمل على طلبي.ومع ذلك, وأود أن لا يزال تكون مهتمة جدا في إجابة على سؤالي—أن الحصول على تلك التي تعمل تحت ويندوز.

هل كانت مفيدة؟

المحلول

أعتقد أن ما تريده هو لربط امتداد الملف مع روبي.أنا لا أعتقد أنه من الممكن الحصول على !# تدوين للعمل على ويندوز ولكن من الممكن الحصول على ويندوز تلقائيا إطلاق سيناريو معين مترجم (كما في المثال الثاني).خطوة بخطوة مناقشة ما تريد القيام به هو هنا تريد على وجه التحديد القسم المعنون:"لإنشاء ملف الجمعيات غير مقترنة أنواع الملفات".أعتقد أنه سيتم إنجاز ما كنت تحاول القيام به.

نصائح أخرى

حل العامة التي يعمل لكل روبي 1.8.6.pxxx و 1.9.1.p0 على Windows التالية:

تحرير الملف:c: uby\lib uby\1.9.1\webrick\httpservlet\cgi_runner.rb

أضف الأسطر التالية في أعلى الملف:

if "1.9.1" == RUBY_VERSION
  require 'rbconfig'  #constants telling where Ruby runs from
end

الآن حدد موقع السطر الأخير حيث يقول:exec ENV["SCRIPT_FILENAME"] التعليق هذا الخط وإضافة التعليمة البرمجية التالية:

# --- from here ---
if "1.9.1" == RUBY_VERSION  #use RbConfig
  Ruby = File::join(RbConfig::CONFIG['bindir'],
                        RbConfig::CONFIG['ruby_install_name'])
  Ruby << RbConfig::CONFIG['EXEEXT']
else                        # use ::Config
  Ruby = File::join(::Config::CONFIG['bindir'],
                        ::Config::CONFIG['ruby_install_name'])
  Ruby << ::Config::CONFIG['EXEEXT']
end

if /mswin|bccwin|mingw/ =~ RUBY_PLATFORM
  exec "#{Ruby}", ENV["SCRIPT_FILENAME"]
else
  exec ENV["SCRIPT_FILENAME"]
end
# --- to here ---

حفظ الملف ثم قم بإعادة تشغيل webrick الخادم.

التفسير:هذا الرمز فقط يبني متغير 'روبي' مع المسار الكامل إلى "ruby.exe" ، (إذا كنت تعمل على ويندوز) يمر معلمة إضافية "c: uby\bin uby.exe" ، إلى النواة.exec() طريقة لذلك ، السيناريو يمكن تنفيذها.

لا تجادل...ولكن لماذا تهتم webrick عندما الهجين هو أسرع بكثير مع الأم جمعت مع ويندوز ؟ و من كوز يعني لا كوخ هو مطلوب.

في الواقع, فمن الممكن الحصول على Windows التعرف على تلك الرموز في ملفات البرامج النصية.ويمكن أن يتم ذلك في فترة قصيرة نسبيا النصي في القول روبي أو AutoIt.فقط بدلا بسيطة محلل أول سطر من ملف نصي مطلوب, جنبا إلى جنب مع بعض الملفات التلاعب.وقد فعلت ذلك عدة مرات عندما إما عبر متوافق مع البرنامج النصي الملفات المطلوبة أو ويندوز عندما امتداد الملف لا تكفي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top