งาน Rake มีสภาพแวดล้อมที่ไม่ถูกต้องภายในงาน cron บน Openshift

ฉันกำลังพยายามตั้งค่างาน cron บน Openshift เนื่องจากการนำเข้าอีเมลในแอปพลิเคชัน Redmine ดังนั้นฉันจึงเตรียมสคริปต์อย่างละเอียดดังนี้:

#!/bin/bash
rake RAILS_ENV=production -f ${OPENSHIFT_REPO_DIR}/Rakefile redmine:email:receive_imap host=imap.googlemail.com port=993 ssl=1 [email protected] password=yyy ...

มันทำงานโดยไม่มีปัญหาเมื่อเปิดใช้งานด้วยมือบนการเชื่อมต่อ ssh เมื่อรันโดย cron จะไม่พบคราดแทน จากการดีบัก ฉันพบว่าเส้นทางไม่เหมือนกับเชลล์การเข้าสู่ระบบ และแม้ว่าฉันจะใช้เส้นทางแบบเต็มสำหรับคราด แต่ทับทิมที่พบคือเวอร์ชัน 1.8 (ไม่ใช่ 1.9 ตามคาร์ทริดจ์) และเมื่อใดก็ตามที่ฉันตั้งค่าเส้นทางเดียวกันกับเชลล์ก็จะไม่พบ libruby-1.9

ทำตามคำแนะนำอื่น ๆ ฉันพยายามเพิ่มบรรทัดต่อไปนี้แทนการตั้งค่า PATH ที่กำหนดเอง:

source /usr/bin/rhcsh

แต่ก็ยังหาคราดไม่พบ ฉันพยายามใช้ Bundle exec ด้วย

วิธีที่ถูกต้องในการตั้งค่าสภาพแวดล้อมสำหรับ cron บน Openshift เพื่อให้สามารถทำงานได้เหมือนเชลล์ล็อกอินคืออะไร


person maxrossello    schedule 27.03.2014    source แหล่งที่มา
comment
ในเชลล์สคริปต์ โดยเฉพาะอย่างยิ่งในงาน cron คุณไม่ควรพึ่งพา $PATH คุณควรอ้างอิง rake ที่คุณต้องการอย่างแน่นอน นี่เป็นมาตรการรักษาความปลอดภัย ไม่เช่นนั้นการเรียกใช้โค้ดสิทธิพิเศษจะง่ายเกินไป วิธีนั้นจะไม่มีปัญหาเรื่องเส้นทางเช่นกัน   -  person Patru    schedule 27.03.2014


คำตอบ (3)


คุณอาจต้องซีดีไปยังไดเร็กทอรีที่ติดตั้งบันเดิลของคุณก่อน (โดยที่ Gemfile ของคุณอยู่) อะไรประมาณนี้?

cd $OPENSHIFT_REPO_DIR && bundle exec rake .....
person Community    schedule 27.03.2014

นี่เป็นจุดบกพร่องในคาร์ทริดจ์ cron คุณสามารถอ้างถึงคำถามนี้ใน SO . จริงๆ แล้วมันเป็นคำถามเกี่ยวกับคาร์ทริดจ์ Python และคาร์ทริดจ์ cron แต่มันคือตลับครอนที่จะส่งผลต่อทุกคน นอกจากนี้ยังมีรายงานข้อผิดพลาดของ OpenShift ที่กล่าวถึงภายในด้วย

ข้อผิดพลาดเป็นไปตามที่คุณสังเกตเห็น คาร์ทริดจ์ cron ใช้ Ruby 1.8 แทน Ruby 1.9 ดังนั้น gems ที่ติดตั้งด้วย Ruby 1.9 จึงไม่สามารถใช้งานได้กับคาร์ทริดจ์ cron ที่ใช้ Ruby 1.8

มีการแก้ไขข้อบกพร่องสำหรับข้อบกพร่องนี้อยู่แล้ว คุณสามารถดูรายงานข้อผิดพลาดของ OpenShift ได้ แต่ไม่แน่ใจเหมือนกันว่าถูกผลักออกไปแล้วหรือเปล่า

ในขณะเดียวกัน มีวิธีแก้ไขปัญหาชั่วคราวโดยส่งออก PATH และ LD_LIBRARY_PATH ในสคริปต์ cron คุณสามารถดูรายงานข้อผิดพลาดของ OpenShift ได้

หวังว่านี่จะช่วยได้

person Jason Ng PT    schedule 29.03.2014

หากคุณใช้ rvm openshift อาจประสบปัญหาในการเปลี่ยนไปใช้ rvm เริ่มต้น คุณยังสามารถลองทำสิ่งนี้ได้ เพื่อที่มันจะตั้งค่า rvm เป็นค่าเริ่มต้นก่อนที่จะรันบันเดิล และยังสามารถสร้างบันทึก cron ของคุณได้เช่นกัน เพื่อรับสถานะที่แน่นอนของคุณ งานครอน:

https://rvm.io/rvm/install

ใช้ Bundle exec เพื่อกำจัดเรคมากกว่าหนึ่งเวอร์ชัน

cd $OPENSHIFT_REPO_DIR && rvm gemset use "yourgemsetname" && RAILS_ENV=production bundle exec rake cron_job:cron_job --silent >> log/cron_log
person Vivek Sharma    schedule 28.06.2014