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

このエラーは設定ごとに 1 回発生しました。しかし、その 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 をダウンロードし、既存の site2 に設定をプッシュしようとしています。ダウンロードした site_settings.json に何か編集を加えるべきでしょうか?

奇妙ですね。申し訳ありませんが、これが無料で提供できる最善の回答です。予算がある場合は、メッセージをお送りください。

両方のサイトがセルフホストされている場合、試せるラケータスクがあります。

私は最近、そのスクリプトを使っていません。Discourse の何か変更があったのかもしれませんが、それは疑問です。書き込もうとしているサイトの API キーを確実に使用しているなら、私には推測もつきません。

rake site_settings:export > settings.ymlを実行しましたが、Discourseサーバーで設定していたタグやタググループがエクスポートされていないことに気づきました。その理由は何でしょうか?

タグはタグであり、サイト設定ではありません。タグの移行方法については存じ上げておりません。

プラグインではなく、テーマコンポーネントの設定もエクスポートする方法はありますか?