How can I import/export settings into a file?

Is it possible, after tuning Discourse on local computer, to export all settings into file and upload them into production?

Thanks.

I guess probably you can export your settings from DB.

discourse=>\dt
...
...
 public | single_sign_on_records     | table | discourse
 public | site_customizations        | table | discourse
 public | site_settings              | table | discourse
 public | stylesheet_cache           | table | discourse
...
...

Notice site_settings table. You can also take this data from your backup. It already have a dump of your database inside it.

Then all you need to do is restore this table to your server from your local dump. :thumbsup:

Courtesy of @blake we now have rake tasks to export/import site settings:

rake site_settings:export > settings.yml
rake site_settings:import < settings.yml

For those who do not have access to rake tasks, I also have contributed a settings uploader that uses the API: GitHub - pfaffman/discourse-settings-uploader: Install a Discourse settings JSON file to a site

Hello,

I’ve used discourse-settings-uploader to upload site_settings.json file from the GitHub Jay mentioned. I get this error when I run it:

./discourse-settings-uploader:39:in `<main>': undefined method `each' for nil:NilClass (NoMethodError)

line39: settings['site_settings'].each do |setting|
line40:  jsetting (setting) unless setting['value'] == setting['default']
line41: end

I used an API key for “All Users” and used “system” when I ran discourse-settings-uploader.
Any thoughts?

للمرجع المستقبلي، بعض المشاكل التي واجهتها أثناء استخدام discourse-settings-uploader مع الحصول على أخطاء 301:

./discourse-settings-uploader community.mysite.com 22f7d44321ae2365d3e3a5e9224524ba0e7302bd75ed06bfbh31ed5090ec6d3b system site-settings.json
SiteSettingtitle="Mysite"
E! 301 Moved Permanently

حصلت على هذه الخطأ مرة واحدة لكل إعداد. لكنني أستطيع تصفح الموقع بنجاح عبر تلك الروابط. لذا استنتجت أن الأمر يعود إلى استخدام http، وهو معطل.

لذا أضفت الآن https إلى اسم الموقع وحصلت على خطأ مختلف:

SiteSettingtitle="My sIte"
E! SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate)
something's wrong with https://community.mysite.com/admin/site_settings/title {"title"=>"Mysite", :api_key=>"22f7d44321ae2365d3e3a5e9224524ba0e7302bd75ed06bfbh31ed5090ec6d3b ec6d3b", :api_username=>"system"}

يبدو أن هذا يعود إلى تكوين محلي غير كافٍ لشهادات الجذر. كان بإمكاني قضاء بعد الظهر في حل هذه المشكلة، لكن بدلاً من ذلك قمت بتعطيل verify_ssl. هذا غير آمن للغاية وقد تحدث أشياء مروعة لك ولأطفالك وأحفادك، لكن في هذه الحالة لم أكن أهتم.

لذلك أضفت هذه الدالة إلى سكريبت الرفع:

def put_no_ssl(url, payload, headers={}, &block)
  RestClient::Request.execute(method: :put, url: url, :payload => payload, headers: headers, verify_ssl: false, &block)
end

وفي الأسفل، غيّرت الاستدعاء من

r = RestClient.put(url, my_hash)

إلى

r = put_no_ssl(url, my_hash)

وكانت النتيجة ناجحة! :sunglasses:

:صرخة: :عائلة_رجل_امرأة_فتاة_فتى:

مرحبًا يا مجتمع،
أحتاج إلى تصدير إعدادات الموقع من بيئة الإنتاج إلى بيئة الاختبار. لقد وجدت تعليمات “Discourse-Settings Uploader”، وأنشأت ملف JSON يحتوي على الإعدادات، لكنني لا أملك إمكانية استيراده. لا أعرف أين يمكنني تشغيل هذا الأمر:
./discourse-settings-uploader HOSTURL API_KEY API_USER SETTINGS_FILE
هل يجب تنفيذ ذلك عبر الطرفية (Terminal)؟ أخبرني عميلي أنهم يستخدمون نسخة مجتمعية من Discourse ولا يملكون وصولاً إلى الطرفية. ماذا يعني ذلك؟ وما أفضل طريقة لحل مشكلتي؟ أنا جديد جدًا في هذا المجال، لذا أحتاج إلى مساعدتكم.
شكرًا مقدّمًا.

شاهد Backup only Site Settings - #5 by pfaffman. تحتاج إلى تحميل السكربت من GitHub وتثبيت Ruby.

rake site_settings:import < settings.yml
أردت فقط ذكر إصدار Docker لهذا الأمر:

d/rake "site_settings:import < settings.yml"

في حال ظهور الرسالة التالية:

The input device is not a TTY

مرحبًا @pfaffman
جربتُ تمامًا كما هو مذكور… ./discourse-settings-uploader https://discourse.example.com d35989078a system site_settings.json

لكن سكريبتي يفشل ولا أعرف السبب أو الكيفية.
يُظهر E! 404 Not Found لكل إعداد.

@Ravi_Teja_Varma،

لقد قمت بإزالة لقطة الشاشة الخاصة بك لأنها تتضمن مفتاح الـ API الخاص بك. لا تتردد في إضافة لقطة شاشة أخرى لا تحتوي على البيانات الحساسة أو تقوم بإخفائها. يجب عليك أيضًا تدوير المفتاح نظرًا لأنه كان عامًا، فيجب اعتباره معرضًا للخطر.

شكرًا لك على المتابعة الفورية. سأعتني بمثل هذه الممارسات من الآن فصاعدًا.

إذا كنت تحصل على خطأ 404، فهذا يعني أن مفتاح API الخاص بك غير صحيح أو أنه غير موجود في المكان الذي يستطيع السكربت الوصول إليه.

لقد قمت بفحص ذلك، وجميع واجهات برمجة التطبيقات (APIs) الخاصة بي تعمل بنفس المفتاح.
وأنا متأكد من أن السكربت ربما ينظر إلى المكان الصحيح، حيث أن عبارة السجل (log statement) تحتوي على عناوين URL مثل:

{url}/admin/site_settings/title
{url}/admin/site_settings/site_description

لقد قمت بتنزيل ملف site_settings.json من أحد المواقع، وأحاول الآن دفع الإعدادات إلى موقع موجود مسبقًا (site2). هل يجب علي إجراء أي تعديلات على ملف site_settings.json الذي قمت بتنزيله؟

غريب. آسف، لكن هذه أفضل إجابة مجانية لدي. يمكنك مراسلتي إذا كان لديك ميزانية.

هناك مهمة rake يمكنك تجربتها إذا كنت تستضيف المواقع بنفسك على كلا الموقعين.

لا أستخدم هذا السكربت بنفسي هذه الأيام. قد يكون أن شيئًا ما تغير في discourse، لكنني أشك في ذلك. إذا كنت متأكدًا من أنك تستخدم مفتاح API للموقع الذي تحاول الكتابة إليه، فلديّ أي تخمين.

لقد جربت استخدام rake site_settings:export > settings.yml. لاحظت أن الوسوم ومجموعات الوسوم التي قمت بتكوينها على خادم Discourse الخاص بي لم يتم تصديرها. لماذا يحدث ذلك؟

الوسوم هي وسوم وليست إعدادات الموقع. لستُ على علم بأي طريقة لنقل الوسوم.

هل توجد طريقة لتصدير إعدادات الإضافات مكونات السمة أيضًا؟