पर फोर्क, रूबी, एक्टिव रिकार्ड और फ़ाइल डिस्क्रिप्टर मैं समझता हूं कि जब हम एक प्रक्रिया को फोर्क करते हैं तो बच्चे की प्रक्रिया माता-पिता की खुली फ़ाइल डिस्क्रिप्टर और ऑफसेट की एक प्रति प्राप्त होती है। मैन पेज के मुताबिक यह माता-पिता द्वारा उपयोग की जाने वाली वही फाइल डिस्क्रिप्टर को संदर्भित करता है। निम्नलिखित कार्यक्रम में कि सिद्धांत के आधार परफोर्क, रूबी, एक्टिव रिकार्ड और फोर्क
puts "Process #{Process.pid}"
file = File.open('sample', 'w')
forked_pid = fork do
sleep(10)
puts "Writing to file now..."
file.puts("Hello World. #{Time.now}")
end
file.puts("Welcome to winter of my discontent #{Time.now}")
file.close
file = nil
प्रश्न 1: काँटेदार प्रक्रिया है जो 10 सेकंड के लिए सो रहा है अपनी फ़ाइल वर्णनकर्ता खोना नहीं चाहिए और न माता पिता प्रक्रिया के रूप में फाइल करने के लिए लिखने में सक्षम हो फ़ाइल को पूरा करता है और बंद करता है और बाहर निकलता है।
प्रश्न 2: लेकिन यदि यह काम करता है तो किसी भी कारण से ActiveRecord इस परिदृश्य में अपना कनेक्शन कैसे खो देता है। यह केवल तभी काम करता है जब मैं ActiveRecord कनेक्ट पर :reconnect => true
सेट करता हूं, यह वास्तव में कनेक्ट हो सकता है, जिसका अर्थ है कि इसका खोना कनेक्शन।
require "rubygems"
require "redis"
require 'active_record'
require 'mysql2'
connection = ActiveRecord::Base.establish_connection({
:adapter => 'mysql2',
:username => 'root_user',
:password => 'Pi',
:host => 'localhost',
:database => 'list_development',
:socket => '/var/lib/mysql/mysql.sock'
})
class User < ActiveRecord::Base
end
u = User.first
puts u.inspect
fork do
sleep 3
puts "*" * 50
puts User.first.inspect
puts "*" * 50
end
puts User.first.inspect
हालांकि, यह रेडिस (v2.4.8) के साथ भी सच नहीं है जो एक कांटा पर कनेक्शन खोना नहीं है। क्या यह आंतरिक रूप से एक कांटा पर फिर से कनेक्ट करने का प्रयास करता है?
यदि ऐसा है तो लेखन फ़ाइल प्रोग्राम क्यों त्रुटि नहीं फेंक रहा है।
क्या कोई यहां बता सकता है कि क्या हो रहा है। धन्यवाद
फ्रेडरिक के उत्तर के लिए धन्यवाद। सुनिश्चित नहीं हैं कि अगर यह एक मूर्खतापूर्ण सवाल है, लेकिन आप कृपया समझा सकता है आप एक "मैं दूर जा रहा हूँ" और फिर संदेश क्या मतलब है। – Sid
mysql मामले में ग्राहक वास्तव में भेजता है एक "QUIT" कमांड तो सॉकेट के सर्वर अंत सॉकेट बंद कर देता है, किसी भी संबद्ध सर्वर साइड संसाधनों आदि विज्ञप्ति 'मुझे दूर जा रहा हूँ' मैं सिर्फ एक आदेश मतलब एक ग्राहक को भेज सकते हैं इससे सर्वर ऐसा करने का कारण बन जाएगा। –