StandaloneコンテナからWebコンテナとデータコンテナを分離するからの議論を続けます。
バグの説明
discourse-setupを実行する際に、SMTPユーザー名に/が含まれていると、スクリプトが失敗します。
sed: -e 式 #1, 文字 74: sed の不正なオプションです
DISCOURSE_SMTP_USER_NAME の変更に失敗しました。
期待される動作
SMTPユーザー名に/が含まれている場合でも受け入れられるべきです。
/は、RFC3696によると、SMTPユーザー名の有効な文字です。
引用符なしの場合、ローカルパートは、
! # $ % & ’ * + - / = ? ^ _ ` . { | } ~
のいずれかの英数字または特殊文字の組み合わせで構成できます。
修正パス
スクリプトは、デフォルトで区切り文字として/を使用するsedコマンドで失敗します。
コロン(:)は電子メールアドレスのlocal-partの有効な文字ではないため、/の代わりにコロンを使用できます。他の文字(カンマやセミコロンなど)がもたらす副作用はありません(ただし、sedパターン内のコロンはエスケープする必要があります。]を使用すると、コロンのエスケープが不要になります)。
- 589行目:
smtp_domain=$(echo $notification_email | sed -e \"s/.*@//\") は次のように変更する必要があります。
smtp_domain=$(echo $notification_email | sed -e \"s:.*@::\")
- 648行目:
DISCOURSE_DEVELOPER_EMAILSは電子メールアドレスを区切るために,を使用しているため、コロン(:)を安全に使用できます。
- 675行目:私のバグの原因です。
sed -i -e \"s/^ #\\?DISCOURSE_SMTP_USER_NAME:.*/ DISCOURSE_SMTP_USER_NAME: $smtp_user_name/w $changelog\" $web_file は次のように変更できます。
sed -i -e \"s:^ #\\?DISCOURSE_SMTP_USER_NAME\\:.*: DISCOURSE_SMTP_USER_NAME\\: $smtp_user_name:w $changelog\" $web_file または
sed -i -e \"s] #\\?DISCOURSE_SMTP_USER_NAME:.*] DISCOURSE_SMTP_USER_NAME: $smtp_user_name]w $changelog\" $web_file
- 同様に684行目(
DISCOURSE_NOTIFICATION_EMAIL)も同様です。
「いいね!」 4
pfaffman
(Jay Pfaffman)
2
そのコードは私が管理しているわけではありませんが、ずっと前に書いたものです。それは素晴らしい解決策ですね。思いつくべきでした。PR(プルリクエスト)は歓迎されると思います。
「いいね!」 4
残念ながら、GitHubアカウントへのアクセスを失いました。彼らは私にコードを求めていますが、私はリンクされたメールアドレスをもう使用していないため、パブリックコードをクローンする以外は、そのプラットフォームの使用を停止しました。
「いいね!」 1
sam
(Sam Saffron)
4
レポートありがとうございます。パッチを提出できる方がいる場合に備えて、pr-welcome を付けます。
いつでもここに .diff を投稿して、コミュニティ メンバーにクレジットを与えることができます 
「いいね!」 4
修正パッチ:
RFC3696 準拠のメールアドレスを許可するように sed コマンドを修正
discourse-setup.fix-272514.patch.gz (601 Bytes)
diff --git a/discourse-setup b/discourse-setup
index 0daafcb..121982e 100755
--- a/discourse-setup
+++ b/discourse-setup
@@ -586,7 +586,7 @@ ask_user_for_config() {
fi
# set smtp_domain default value here rather than use Rails default of localhost
- smtp_domain=$(echo $notification_email | sed -e "s/.*@//")
+ smtp_domain=$(echo $notification_email | sed -e "s].*@]]")
if [ ! -z $letsencrypt_account_email ]
then
@@ -645,7 +645,7 @@ ask_user_for_config() {
update_ok="n"
fi
- sed -i -e "s/^ DISCOURSE_DEVELOPER_EMAILS:.*/ DISCOURSE_DEVELOPER_EMAILS: '$developer_emails'/w $changelog" $web_file
+ sed -i -e "s]^ DISCOURSE_DEVELOPER_EMAILS:.*] DISCOURSE_DEVELOPER_EMAILS: '$developer_emails']w $changelog" $web_file
if [ -s $changelog ]
then
rm $changelog
@@ -672,7 +672,7 @@ ask_user_for_config() {
update_ok="n"
fi
- sed -i -e "s/^ #\?DISCOURSE_SMTP_USER_NAME:.*/ DISCOURSE_SMTP_USER_NAME: $smtp_user_name/w $changelog" $web_file
+ sed -i -e "s]^ #\?DISCOURSE_SMTP_USER_NAME:.*] DISCOURSE_SMTP_USER_NAME: $smtp_user_name]w $changelog" $web_file
if [ -s $changelog ]
then
rm $changelog
@@ -681,7 +681,7 @@ ask_user_for_config() {
update_ok="n"
fi
- sed -i -e "s/^ #\?DISCOURSE_NOTIFICATION_EMAIL:.*/ DISCOURSE_NOTIFICATION_EMAIL: $notification_email/w $changelog" $web_file
+ sed -i -e "s]^ #\?DISCOURSE_NOTIFICATION_EMAIL:.*] DISCOURSE_NOTIFICATION_EMAIL: $notification_email]w $changelog" $web_file
if [ -s $changelog ]
then
rm $changelog
@@ -745,7 +745,7 @@
then
echo "Enabling Let's Encrypt"
fi
- sed -i -e "s/^ #\?LETSENCRYPT_ACCOUNT_EMAIL:.*/ LETSENCRYPT_ACCOUNT_EMAIL: $letsencrypt_account_email/w $changelog" $web_file
+ sed -i -e "s]^ #\?LETSENCRYPT_ACCOUNT_EMAIL:.*] LETSENCRYPT_ACCOUNT_EMAIL: $letsencrypt_account_email]w $changelog" $web_file
if [ -s $changelog ]
then
rm $changelog
「いいね!」 3
この素晴らしい指摘をありがとうございます!パッチを更新しました。
「いいね!」 3