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

Я получал эту ошибку для каждой настройки. Однако я мог успешно заходить на сайт по этим URL. Так что я понял — запросы идут через 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
Нужно ли это делать через терминал? Мой клиент сказал, что у них используется сообщество 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-ключ указан неверно или скрипт не может его найти.

Я проверил это. Все мои API работают с одним и тем же ключом.
Я уверен, что скрипт обращается в правильное место, так как в логах есть URL-адреса вида:

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

Я загрузил файл site_settings.json с одного сайта и теперь пытаюсь применить эти настройки к существующему сайту2. Нужно ли мне внести какие-либо изменения в загруженный файл site_settings.json?

Странно. Извините, но это мой лучший бесплатный ответ. Вы можете написать мне, если у вас есть бюджет.

Если вы самостоятельно размещены на обоих сайтах, можно попробовать задачу rake.

Я сам в последнее время не использую этот скрипт. Возможно, что-то изменилось в Discourse, но я сомневаюсь. Если вы уверены, что используете ключ API для сайта, в который пытаетесь записать данные, то у меня нет предположений.

Я попробовал использовать rake site_settings:export > settings.yml. Я заметил, что теги и группы тегов, которые я настроил на своём сервере Discourse, не были экспортированы. Почему так произошло?

Теги — это теги, а не настройки сайта. Мне не известно способа миграции тегов.

Есть ли способ также экспортировать настройки для плагинов компонентов темы?