मैं अपने रेल 3.1 ऐप के लिए एक डिमन सेट करने की कोशिश कर रहा हूं जो एक अनबंटू सर्वर पर चल रहा है। बस इस तरह सरल कुछ:रेल 3.1 + डेमन्स मणि मुझे अपने डेटाबेस तक पहुंचने नहीं देगा
require File.expand_path('../../config/environment', __FILE__)
require 'rubygems'
require 'daemons'
Daemons.run_proc('my_script') do
loop do
puts BlogPost.count
sleep(5)
end
end
लेकिन जब मैं BlogPost.count
के लिए मिलता है, मैं निम्नलिखित त्रुटि मिलती है:
/usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:283:in `query': Mysql2::Error: MySQL server has gone away: SHOW FIELDS FROM `blog_posts` (ActiveRecord::StatementInvalid)
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:283:in `execute'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract_adapter.rb:244:in `log'
from /usr/lib/ruby/gems/1.8/gems/activesupport-3.1.0/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract_adapter.rb:239:in `log'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:283:in `execute'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:473:in `columns'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `initialize'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:185:in `with_connection'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:92:in `initialize'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/base.rb:706:in `call'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/base.rb:706:in `default'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/base.rb:706:in `[]'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/base.rb:706:in `columns'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/base.rb:722:in `column_names'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/relation/calculations.rb:192:in `aggregate_column'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/relation/calculations.rb:213:in `execute_simple_calculation'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/relation/calculations.rb:187:in `perform_calculation'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/relation/calculations.rb:155:in `calculate'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/relation/calculations.rb:58:in `count'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/base.rb:445:in `__send__'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/base.rb:445:in `count'
from script/background_job_processor_control.rb:22
किसी भी विचार क्यों मेरी स्क्रिप्ट MySQL से कनेक्ट नहीं कर सकता है? अगर मैं Daemons.run_proc
से पहले BlogPost.count
कोड डालता हूं, तो मैं बस MySQL से कनेक्ट कर सकता हूं।
---------- संपादित करें: हल हो गया!
bundle exec
शामिल करें शुरू करने/मेरी डेमॉन stoping: ------------किसी समाधान जानने के लिए उत्सुक के लिए, मैं यह काम करने के लिए प्राप्त करने के लिए तीन बातें करना पड़ा :
RAILS_ENV=production bundle exec myscript.rb start
।- इस बिंदु पर मैंने MySQL2 त्रुटि प्राप्त करना बंद कर दिया, लेकिन लॉगर त्रुटि प्राप्त करना शुरू कर दिया। समाधान निम्नलिखित कोड को
run_proc
ब्लॉक जोड़ने के लिए था:ActiveRecord::Base.logger = ActiveSupport::BufferedLogger.new('/path/to/log/file.log')
- फिर मुझे तीसरी त्रुटि मिली, और समाधान को स्क्रिप्ट में पहले के बजाय
run_proc
ब्लॉक के अंदर रेल पर्यावरण की आवश्यकता थी।
मेरे अंतिम स्क्रिप्ट इस तरह दिखता है:
require 'rubygems'
require 'daemons'
Daemons.run_proc('my_script') do
require File.expand_path('../../config/environment', __FILE__)
ActiveRecord::Base.logger = ActiveSupport::BufferedLogger.new('/path/to/log/file.log')
loop do
puts BlogPost.count
sleep(5)
end
end
क्या आप 'बंडल exec my_script_ctl start' के साथ डिमन्स शुरू कर रहे हैं? – forker
हम्म, नहीं, मैं 'RAILS_ENV = उत्पादन रूबी स्क्रिप्ट/myscript_control.rb प्रारंभ कर रहा था। मैंने अभी इसे अपना रास्ता करने का प्रयास किया है, और अब मुझे एक अलग त्रुटि मिल रही है: /usr/lib/ruby/gems/1.8/gems/activesupport-3.1.0/lib/active_support/buffered_logger.rb:109:in 'लिखें': बंद स्ट्रीम (IOError) – NudeCanalTroll
इसलिए मैंने यहां सलाह का पालन किया (http://stackoverflow.com/questions/5809678/rails-3-daemons-gem-exception-when-querying-model) से छुटकारा पाने के लिए लॉगिंग त्रुटि, और मुझे एक नई त्रुटि मिली है जिसमें कहा गया है कि मेरे विकास डेटाबेस में कुछ टेबल मौजूद नहीं हैं। लेकिन मैं इसे उत्पादन पर चलाने की कोशिश कर रहा हूं, इसलिए मैंने 'बंडल निष्पादन' के सामने 'RAILS_ENV = उत्पादन' जोड़ा, और अब हम "MySQL सर्वर चला गया है" की मूल त्रुटि पर वापस आ गए हैं। :( – NudeCanalTroll