继续讨论 将独立容器移至单独的 Web 和数据容器:
Bug 描述
运行 discourse-setup 时,如果 SMTP 用户名包含 /,脚本将失败:
sed: -e 表达式 #1, 字符 74: 对于 ‘s’ 未知选项
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 行是我的 Bug 来源:
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 个赞
这是一个补丁:
修复 sed 命令,以允许符合 RFC3696 的电子邮件地址
discourse-setup.fix-272514.patch.gz (601 字节)
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 @@ ask_user_for_config() {
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 个赞