Tugas rake memiliki lingkungan yang salah dalam tugas cron di Openshift

Saya mencoba mengatur pekerjaan cron di Openshift karena mengimpor email di aplikasi Redmine. Oleh karena itu, saya menyiapkan skrip yang cermat seperti ini:

#!/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 ...

Ini berjalan tanpa masalah ketika diluncurkan secara manual pada koneksi ssh. Ketika dijalankan oleh cron, rake tidak dapat ditemukan. Melakukan beberapa debugging, saya menemukan bahwa jalurnya tidak sama dengan shell login; dan bahkan jika saya menggunakan path lengkap untuk rake, ruby ​​​​yang ditemukan adalah versi 1.8 (bukan 1.9 sesuai kartrid), dan setiap kali saya mengatur jalur yang sama dengan shell, maka libruby-1.9 tidak ditemukan.

Mengikuti beberapa saran lain saya mencoba menambahkan baris berikut sebagai pengganti pengaturan PATH khusus:

source /usr/bin/rhcsh

namun demikian rake masih belum ditemukan. Saya juga mencoba menggunakan bundle exec.

Apa cara yang tepat untuk mengatur lingkungan cron di Openshift sehingga dapat berjalan seperti shell login?


person maxrossello    schedule 27.03.2014    source sumber
comment
Dalam skrip shell, terutama dalam pekerjaan cron, Anda tidak boleh bergantung pada $PATH, Anda harus mereferensikan rake yang Anda inginkan sepenuhnya. Ini adalah tindakan pengamanan karena jika tidak, akan terlalu mudah untuk mengeksekusi kode istimewa. Dengan begitu, tidak akan ada kendala jalur juga.   -  person Patru    schedule 27.03.2014


Jawaban (3)


Anda mungkin perlu melakukan cd ke direktori tempat bundel Anda diinstal terlebih dahulu (di mana Gemfile Anda berada) mungkin seperti ini?

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

Ini adalah bug di kartrid cron. Anda dapat merujuk ke pertanyaan ini di SO . Ini sebenarnya pertanyaan dengan kartrid Python dan kartrid cron. Tapi kartrid cron-lah yang akan mempengaruhi semuanya. Ada juga Laporan Bug OpenShift yang disebutkan di dalamnya.

Bugnya adalah seperti yang Anda amati, kartrid cron menggunakan Ruby 1.8, bukan Ruby 1.9. Dengan demikian, permata yang diinstal dengan Ruby 1.9 tidak tersedia untuk kartrid cron yang menggunakan Ruby 1.8.

Sudah ada perbaikan bug untuk bug ini, Anda dapat merujuk ke Laporan Bug OpenShift. Tapi tidak terlalu yakin apakah sudah dikeluarkan.

Sementara itu, ada solusi sementara, dengan mengekspor PATH dan LD_LIBRARY_PATH di skrip cron. Anda dapat merujuk ke Laporan Bug OpenShift.

Semoga ini membantu.

person Jason Ng PT    schedule 29.03.2014

Jika Anda menggunakan rvm, openshift mungkin mengalami masalah saat beralih ke rvm default. Anda juga dapat mencoba sesuatu seperti ini sehingga rvm akan disetel ke default sebelum menjalankan bundel dan juga dapat menghasilkan log cron Anda juga untuk mendapatkan status yang tepat dari Anda pekerjaan cron:

https://rvm.io/rvm/install

gunakan bundle exec untuk menyingkirkan lebih dari satu versi rake

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