استخدام الله لمراقبة يونيكورن - ابدأ الخروج برمز غير صفري = 1
-
28-09-2019 - |
سؤال
أنا أعمل على نص الله لمراقبة وحيدات بلدي. لقد بدأت مع البرنامج النصي لأمثلة Github وقمت بتعديله لمطابقة تكوين الخادم الخاص بي. بمجرد تشغيل الله ، أوامر مثل god stop unicorn
و god restart unicorn
العمل على ما يرام.
لكن، god start unicorn
النتائج في WARN: unicorn start command exited with non-zero code = 1
. الجزء الغريب هو أنه إذا قمت بنسخ البرنامج النصي Start مباشرة من ملف التكوين ، فإنه يبدأ مباشرة مثل موستانج جديدة.
هذا هو أمر البدء الخاص بي:
/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D
لقد أعلنت جميع المسارات على أنها مطلقة في ملف التكوين. أي أفكار ما الذي قد يمنع هذا البرنامج النصي من العمل؟
المحلول
لم أستخدم Unicorn كخادم تطبيق ، لكنني استخدمت الله للمراقبة من قبل.
إذا كنت أتذكر بحق عندما تبدأ الله وتعطي ملف التكوين الخاص بك ، فإنه يبدأ تلقائيًا كل ما أخبرته بمشاهدته. من المحتمل أن يونيكورن قيد التشغيل بالفعل ، وهذا هو السبب في أنه يرمي الخطأ.
تحقق من هذا عن طريق التشغيل god status
بمجرد أن تبدأ الله. إذا لم يكن هذا هو الحال ، فيمكنك التحقق من سطر الأوامر ما هي حالة خروج Comand:
/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D;
echo $?;
سوف يطبع هذا الصدى حالة الخروج من الأمر الأخير. إذا كان الصفر ، فإن الأمر الأخير لم يبلغ عن أي أخطاء. حاول بدء Unicorn مرتين على التوالي ، أتوقع المرة الثانية التي ستعود فيها 1 ، لأنها تعمل بالفعل.
تعديل:
بما في ذلك الحل الفعلي من التعليقات ، حيث يبدو أن هذا استجابة شائعة:
يمكنك تعيين مستخدم ومجموعة صريحة إذا كانت العملية تتطلب تشغيلها كمستخدم معين.
God.watch do |w|
w.uid = 'root'
w.gid = 'root'
# remainder of config
end
نصائح أخرى
كانت مشكلتي أنني لم أتجمع أبداً كجذر. هذا ما فعلته:
sudo bash
cd RAILS_ROOT
bundle
تحصل على تحذير يخبرك ألا تفعل هذا أبدًا:
لا تقم بتشغيل Bundler كجذر. يمكن أن يطلب Bundler Sudo إذا كان هناك حاجة إليه ، وتثبيت حزمةك كجذر سيؤدي إلى كسر هذا التطبيق لجميع المستخدمين من غير الجذر على هذا الجهاز.
لكنها كانت الطريقة الوحيدة التي يمكنني الحصول عليها من Resque أو Unicorn للركض مع الله. كان هذا على مثيل EC2 إذا كان ذلك يساعد أي شخص.
ساعدني إضافة خيار السجل بشكل كبير في تصحيح الأخطاء.
God.watch do |w|
w.log = "#{RAILS_ROOT}/log/god.log"
# remainder of config
end
في النهاية ، تبين أن الخلل الخاص بي هو start_script
في الله تم إعدامه في development
بيئة. لقد أصلحت هذا عن طريق إلحاق RAILS_ENV
إلى START SCRIPT.
start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C #{config_file} -L #{log_file} -d"