تشغيل نصوص روبي المخصصة

أنا قادر على إنجاز المهام التي أرغب فيها باستخدام وحدة تحكم Rails. ومع ذلك، تحتاج هذه المهام إلى التشغيل بشكل دوري ولا أريد كتابة كل أمر على حدة في وحدة تحكم Rails. كيف يمكنني تشغيل نص Ruby برمجي على مثيل Discourse المستضاف ذاتيًا؟

بالإضافة إلى ذلك، سيقرأ النص البرمجي ملف CSV، أين يجب أن أضع ملف CSV هذا بحيث يظل متاحًا داخل حاوية Docker ولن يختفي بعد التحديثات؟

أحد الأساليب هو تحميل الملف ثم تخزين عنوان URL في إعداد. سيؤدي تحميل ملف إلى منع حذفه.

يمكنك تشغيل مهمة في مكون إضافي. توجد العديد من الأمثلة على المهام في مكونات discourse و Pavilion الإضافية.

إعجاب واحد (1)

أتساءل عما إذا كانت حالة الاستخدام الخاصة بي أبسط مما شرحت في البداية. أنا عادةً أقوم بما يلي:

./launcher enter app
rails c

> u= User.find(1)
> some more code here

ما أود فعله:

./launcher enter app
./my_code.rb

حيث يحتوي ملف my_code.rb على محتويات ما أقوم بتنفيذه في وحدة تحكم rails من قبل.

لقد ذكرت أنك تريد “تشغيل المهام بشكل دوري”.

إذا كان هذا “طوال عمر المجتمع” محتملاً، فمن المفيد كتابة المكون الإضافي الخاص بك للقيام بذلك. الأمر ليس أصعب بكثير من الدخول إلى وحدة تحكم Rails (فوضوي وأكثر خطورة!).

سيسمح لك ذلك أيضًا بتخزين الكود وإدارته بشكل صحيح وتحسينه بمرور الوقت.

بدلاً من ذلك، يمكنك تعريف مهمة Rake، ولكن ستحتاج إلى تخزينها في مكان ما، وربما أيضًا في مكون إضافي!

إعجابَين (2)

نعم، كانت صياغة سيئة. ما قصدته هو ما يلي: أحتاج إلى تشغيل هذه المهمة عدة مرات طوال فترة حياة المجتمع. ومع ذلك، لا توجد فترة زمنية ثابتة ويتم تحديد وقت الحاجة إلى تشغيلها بواسطة حدث خارجي ما. لذلك سأقوم بتشغيل المهمة بنفسي عدة مرات دون أي فجوة زمنية منتظمة بينها.

لذا قد تكون مهمة “rake” هي الحل المناسب لك. تم تصميمها خصيصًا لتشغيل النصوص المخصصة. ومع ذلك، سأضعها في إضافة، حيث يمكنك بعد ذلك إدارتها بشكل جيد على GitHub ولن تنسى أبدًا مكان وضعها أو تحذفها عن طريق الخطأ.

إليك الكثير من الأمثلة: discourse/lib/tasks at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

إعجابَين (2)

يمكنك إما جعله مهمة “rake” أو وضعه في مهمة يجب عليك تشغيلها يدويًا من /sidekiq

يمكنك إما تحميل ملف csv الخاص بك من تجربة المستخدم وتمريره بقيمة إعداد كما هو مقترح، أو تحميله في موضوع وجعل البرنامج النصي الخاص بك يحصل على أحدث مشاركة/تحميل في الموضوع، أو تحميله إلى /var/discourse/shared/standalone/xxx.csv والوصول إليه كـ /shared/xxx.csv في البرنامج النصي. أو ربما يجب عليك القيام بكل شيء باستخدام واجهة برمجة التطبيقات بدلاً من تحميل ملف csv.

أنت لا تصف ما تحاول القيام به، فقط حلك الذي قد لا يكون الأفضل.