حسنًا، فشل التثبيت (فإن سكريبت التثبيت الخاص بي يحصل على مفتاح API ليتمكن من تعيين mailgun_api_key). لقد تحققت من ذلك أيضًا في بيئة التطوير المحلية لدي.
$ rake api_key:get
rake aborted!
NoMethodError: undefined method `create_master_key' for ApiKey (call 'ApiKey.connection' to establish a connection):Class
Did you mean? create_with
/home/pfaffman/src/discourse/lib/tasks/api.rake:5:in `block in <main>'
Tasks: TOP => api_key:get
(See full trace by running task with --trace)
بدافع الفضول، هل تقوم بمسح مفتاح الـ API بعد الانتهاء؟ قد تكون لاحظت أنني أجريت العديد من التغييرات مؤخرًا لضمان تتبع أفضل لمفاتيح الـ API. نحن نحاول تقليل وجود مفاتيح API “غير مستخدمة” تترك كثغرات أمنية محتملة.
إذا كان هذا يعمل على الخادم، فربما يمكنك استخدام Ruby لتعيين إعداد الموقع، بدلاً من إنشاء مفتاح API واستخدامه؟
أوه! أعتقد أنه من الأفضل عدم تغيير المفتاح إذا كان موجودًا بالفعل، أو إنشاء مهمة create_if_not_exists. من المفيد جدًا القدرة على الحصول على المفتاح الحالي عبر مهمة Rake دون الحاجة إلى تغييره وكسر أي شيء يستخدمه.
في بعض الأماكن في أدوات Ansible الخاصة بي، إذا لم يكن لدي مفتاح API، فأنا أستدعي مهمة Rake هذه للحصول على المفتاح الحالي، مثل:
- name: Get api key
block:
- shell: docker exec -w /var/www/discourse -i {{ discourse_yml }} rake api_key:get
register: get_api_key
- set_fact:
discourse_api_key: "{{ get_api_key.stdout }}"
when: discourse_api_key is not defined
أعتقد أن الوقت الوحيد الذي يكون فيه من الضروري حقًا الحصول عليه بهذه الطريقة هو عند إجراء تثبيت نظيف. (بالنسبة للمواقع الموجودة، لدي مفتاح API في المتغيرات الخاصة بذلك الموقع.)
أفترض أنه مع الطريقة الجديدة التي يتم بها التعامل مع المفاتيح، يمكنني حذف المفتاح عندما أنتهي، أو، على سبيل المثال، تغيير إعدادات الموقع بطريقة ما عن طريق تشغيل سكريبت Rails داخل الحاوية؟
التغيير الوحيد الذي قمت به هو أنه يمكنك الآن امتلاك مفاتيح متعددة لكل مستخدم (أو عدة “مفاتيح رئيسية”). وهذا يعني أنه يمكن منح كل تكامل مفتاحه الخاص، ويمكن تدقيقه أو إلغاؤه أو حذفه بشكل منفصل. لذا، في حالتك، يمكنك إنشاء مفتاح مع الوصف “أدوات إعداد pfaffman”. وبذلك يعرف مسؤولو الموقع الغرض منه، ويمكنهم إلغاؤه أو حذفه عند عدم الحاجة إليه بعد الآن.
أما فيما يتعلق بكيفية ترجمة ذلك إلى مهمة rake… لست متأكدًا. ربما يمكننا وجود مهمة باسم api:get_or_create "وصف مفتاحي"
آسف يا @pfaffman، لكنني أخشى أنني سأضطر إلى إزالة مهمة rake الجديدة هذه في طلب سحب (PR) قادم. سنقوم بتجزئة مفاتيح API في قاعدة البيانات، لذا سيكون من المستحيل جوهريًا استعادة مفتاح موجود.
لقد استبدلت مهمة get_or_create_master بمهمة create_master أبسط، والتي ستقوم بإنشاء مفتاح جديد بشكل قاطع. إذا كنت ترغب في امتلاك مفتاح واحد فقط، فستحتاج إلى تتبع المفتاح في نظامك الخاص.
انتظر. ماذا؟! منذ متى؟ مهما كان الالتزام الموجود في مصدر discourse الحالي على القرص الصلب الخاص بي، لا يزال يحتوي على schema.rb. إنه مفيد حقًا، حقًا، أن تكون قادرًا على معرفة النموذج الذي قد تبحث عنه. القدرة على فتح ملف واحد والبحث عن شيء ما (على سبيل المثال، لمعرفة النموذج الذي قد تبحث عنه) أسهل بكثير من البحث في أكثر من 200 ملف في app/models. لا توجد حتى طريقة جيدة للقيام بـ grep على المخطط فقط في نهاية النماذج.
إذا كنت لا تعرف النموذج الذي تبحث عنه، فكيف يمكنك العثور عليه؟ مثل وجود العديد من الجداول المتعلقة بـ “auth”، وليس جميعها تبدأ بـ auth، كيف يمكنك البدء في معرفة مكان البحث؟