Markdown JS 支持两种协议

版本:2.7.0.beta1
安装:discourse-docker

大家好,

不知该如何更好地描述这个问题,但我们 Discourse 安装中的 markdown-it JS 包无法正常工作。不知何故,JavaScript 的 URL 中会被额外添加一个协议"https"(该文件通过 CDN 提供并存储在我们的 S3 存储桶中)。

我附上了一张截图。
image

所有其他资源都运行正常。

仅这个问题导致我们无法获得预览功能 :frowning:

感谢大家的时间,期待回复 :slight_smile:

其他可用资源的截图:

您能在这里分享您的 app.yml 文件吗?

是的,当然。

由 Ansible 管理。请勿在服务器上直接修改

这是 Discourse Docker 容器的独立一体化模板

修改此文件后,您必须重新构建

/var/discourse/launcher rebuild app

编辑时请非常小心!

YAML 文件对空白字符或缩进的错误极其敏感!

如有需要,请访问 http://www.yamllint.com/ 验证此文件

templates:
#- “templates/postgres.template.yml”
#- “templates/redis.template.yml”

  • “templates/web.template.yml”
  • “templates/web.ratelimited.template.yml”

如果您想添加 Lets Encrypt (https),请取消注释以下两行

  • “templates/web.ssl.template.yml”
    #- “templates/web.letsencrypt.ssl.template.yml”

此容器应暴露哪些 TCP/IP 端口?

如果您希望 Discourse 与 Apache 或 nginx 等其他 Web 服务器共享端口,

请参阅 Run other websites on the same machine as Discourse 了解详情

expose:

  • “80:80” # http
  • “443:443” # https

params:
db_default_text_search_config: “pg_catalog.english”

将 db_shared_buffers 设置为总内存的最大 25%。

将基于检测到的 RAM 由 bootstrap 自动设置,您也可以覆盖

db_shared_buffers: ‘16GB’

可提高排序性能,但会增加每个连接的内存使用量

#db_work_mem: “40MB”

此容器应使用哪个 Git 修订版?(默认:tests-passed)

#version: tests-passed

env:
LANG: en_US.UTF-8

DISCOURSE_DEFAULT_LOCALE: en

支持多少并发 Web 请求?取决于内存和 CPU 核心数。

将基于检测到的 CPU 由 bootstrap 自动设置,您也可以覆盖

UNICORN_WORKERS: 8

TODO: 此 Discourse 实例将响应的域名

必填项。Discourse 无法在纯 IP 地址上运行。

DISCOURSE_HOSTNAME: ‘community-dev.stackit.cloud’

如果您希望容器以与上述指定的相同主机名(-h 选项)启动,请取消注释

(默认为 “$hostname-$config”)

#DOCKER_USE_HOSTNAME: true

TODO: 初始注册时将设为管理员和开发者的逗号分隔邮箱列表

示例:‘user1@example.com,user2@example.com’

DISCOURSE_DEVELOPER_EMAILS: ‘xxx’

TODO: 用于验证新账户和发送通知的 SMTP 邮件服务器

SMTP 地址、用户名和密码为必填项

警告:SMTP 密码中的字符 ‘#’ 可能导致问题!

DISCOURSE_SMTP_ADDRESS: ‘1.2.3.4’
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: ‘xx@xx.de’
DISCOURSE_SMTP_PASSWORD: ‘xxx’
DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

如果您添加了 Lets Encrypt 模板,请取消注释以下行以获取免费 SSL 证书

#LETSENCRYPT_ACCOUNT_EMAIL: info@ediri.de

此 Discourse 实例的 http 或 https CDN 地址(配置为拉取)

请参阅 Enable a CDN for your Discourse 了解详情

#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
#DISCOURSE_CDN_URL: community-cdn.change.me

MaxMind 地理位置 IP 地址查询密钥

请参阅 Upgrade / Rebuilds Fail due to MaxMind DB EOL - #23 by sam 了解详情

#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

DISCOURSE_DB_POOL: 16
DISCOURSE_DB_USERNAME: ‘discourse’
DISCOURSE_DB_PASSWORD: ‘yyy’
DISCOURSE_DB_HOST: 1.2.3.4
DISCOURSE_DB_NAME: ‘discourse’
DISCOURSE_DB_PORT: 5432

DISCOURSE_REDIS_HOST: ‘y.de
DISCOURSE_REDIS_PASSWORD: ‘xxx’
DISCOURSE_REDIS_PORT: 49456

DISCOURSE_MESSAGE_BUS_REDIS_ENABLED: true
DISCOURSE_MESSAGE_BUS_REDIS_HOST: ‘y.de
DISCOURSE_MESSAGE_BUS_REDIS_PORT: 49456
DISCOURSE_MESSAGE_BUS_REDIS_PASSWORD: ‘xxx’

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_ENDPOINT: https://assets.xxx
DISCOURSE_S3_ACCESS_KEY_ID: ‘discourse-dev’
DISCOURSE_S3_SECRET_ACCESS_KEY: ‘xxx’
DISCOURSE_S3_CDN_URL: https://discourse-dev.assets.xxx
DISCOURSE_S3_BUCKET: ‘discourse-dev’
DISCOURSE_S3_BACKUP_BUCKET: ‘discourse-dev/backups’
DISCOURSE_BACKUP_LOCATION: s3
DISCOURSE_S3_INSTALL_CORS_RULE: false

Docker 容器是无状态的;所有数据都存储在 /shared 中

volumes:

  • volume:
    host: /var/discourse/shared/standalone
    guest: /shared
  • volume:
    host: /var/discourse/shared/standalone/log/var-log
    guest: /var/log

插件放在此处

请参阅 Install plugins on a self-hosted site 了解详情

hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone GitHub - discourse/docker_manager: Plugin for use with discourse docker image · GitHub
- git clone GitHub - discourse/discourse-cakeday: Show a birthday cake emoji beside the names of members on their join anniversary, or their actual birthday -- and a browsable directory of upcoming anniversaries / birthdays. · GitHub
- git clone GitHub - discourse/discourse-oauth2-basic: A basic OAuth2 plugin for use with Discourse · GitHub
#- git clone GitHub - discourse/discourse-bbcode: vBulletin BBCode plugin · GitHub

after_assets_precompile:
- exec:
cd: $home
cmd:
- sudo -E -u discourse bundle exec rake s3:upload_assets

构建后运行的任何自定义命令

run:

  • exec: echo “开始自定义命令”

如果您想设置首次注册的“发件人”邮箱地址,请取消注释并修改:

收到首次注册邮件后,请重新注释该行。该行只需运行一次。

  • exec: rails r “SiteSetting.notification_email=‘xxx@xxx.de’”
  • exec: echo “结束自定义命令”

您是否在使用反向代理?您是否在设置中启用了 force_https

是的,已启用 force_https。没有反向代理,只有内置的 nginx。

奇怪的是,其他使用 CDN 地址的 JS 文件都能正常工作,唯独 markdown-it 有问题。

我不太清楚该在代码的哪里排查,毕竟我不懂 Ruby。:slight_smile: :grinning:

1 个赞

还需要我提供哪些额外信息才能帮您找到解决方案?我是否需要检查一下代码?

嗨,有人知道如何解决这个问题吗?

1 个赞

你的配置有些奇怪。

你设置了 S3 CDN,但它和存储桶使用的是同一个 URL?

data-s3-cdn="https://discourse-dev.assets.schwarz" 
data-s3-base-url="//discourse-dev.assets.schwarz"

与 Meta 的配置对比:

data-s3-cdn="https://d11a6trkgmumsb.cloudfront.net" 
data-s3-base-url="//assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com"

加载动态脚本的代码会尝试将 S3_BASE_URL 替换为 S3_CDN

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse-common/addon/lib/get-url.js#L35-L37

1 个赞

是的,两个 URL 是相同的,因为我们使用 Minio 作为兼容 S3 的对象存储。

@Falco,你说得对。将两个 URL 分开确实解决了问题:slight_smile:

感谢你的帮助 :slight_smile:

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.