حاول حل المشكلة عن طريق ترحيل الملفات إلى S3. أول شيء هو أن الأمر يُرجع:
GlobalSetting.use_s3?
false
والآن السؤال: إذا كان تحميل الصور الجديدة يعمل (أي أن S3 مُعدّ بشكل صحيح)، فما الذي يسبب هذه الخطأ (أريد نقل الصور الحالية باستخدام DRY_RUN=1 rake uploads:migrate_to_s3)؟
هل يجب عليّ ضبط شيء ما بخلاف الإعدادات في لوحة الإدارة؟
لقد حاولت تعديل ملف discourse.conf على النحو التالي:
إذا لم أكن مخطئًا، فلا يمكنك تغيير الإعدادات العامة من وحدة تحكم Rails؛ ولكن يمكنك تغيير إعدادات الموقع من وحدة التحكم:
مثال بسيط لتغيير إعدادات الموقع:
pry(main)> SiteSetting.site_description
=> "My Cool Site"
pry(main)> SiteSetting.site_description = "My Great Discourse Site"
=> "My Great Discourse Site"
pry(main)> SiteSetting.site_description
=> "My Great Discourse Site"
مثال محدد يقارن بين الإعدادات العامة وإعدادات الموقع:
pry(main)> GlobalSetting.force_https
=> true
pry(main)> SiteSetting.force_https = false
false
pry(main)> SiteSetting.force_https
=> false
pry(main)> SiteSetting.force_https = true
=> true
pry(main)> GlobalSetting.force_https
=> true
pry(main)> GlobalSetting.force_https = false
NoMethodError: undefined method `force_https=' for GlobalSetting:Class
Did you mean? force_https
from (pry):61:in `__pry__'
pry(main)> GlobalSetting.force_https = true
NoMethodError: undefined method `force_https=' for GlobalSetting:Class
Did you mean? force_https
from (pry):62:in `__pry__'
عندما قمت بهذا النوع من الاختبارات من وحدة تحكم Rails، أدى ذلك إلى اعتقادي بأن الإعدادات العامة لا يمكن تغييرها في التطبيق بعد بناء التطبيق؛ بينما يمكن تغيير إعدادات الموقع في التطبيق بعد بنائه وتشغيله.
على سبيل المثال، تُحدَّد عناوين البريد الإلكتروني للمطورين في ملف YAML للحاوية، ولا يمكن تغيير هذه القيمة في التطبيق، مما يضيف طبقة أمان للموقع.
في بعض الحالات، نرى أن إعدادًا عامًا يُخصص لإعداد موقع، ثم يُستخدم إعداد الموقع في التطبيق وبالتالي يمكن تغييره؛ ومع ذلك، عندما يُستخدم الإعداد العام في التطبيق، لا يمكن تغيير هذه القيمة (أو على ما يبدو أثناء الاختبار).
يبدو، بناءً على اختباراتي المحدودة، أن هذا أحد الفروق الأساسية بين الإعدادات العامة وإعدادات الموقع.
لذلك، أعتقد أن هذا هو السبب الجوهري عندما حاول @eextra ضبط GlobalSetting.use_s3؟ true، وجد أن الأمر لم يعمل كما هو متوقع:
pry(main)> GlobalSetting.use_s3?
=> false
pry(main)> GlobalSetting.use_s3 = true
NoMethodError: undefined method `use_s3=' for GlobalSetting:Class
Did you mean? use_s3?
from (pry):8:in `__pry__'