nordize
(Nordize)
1
我有一个标准的(编辑:非开发)docker 安装在 /var/discourse。是否可以使用本地插件目录在 Discourse 中加载插件,而不是从 app.yml 链接到远程 github 仓库?如果可以,如何操作?
我尝试了两种我认为应该有效的方法:
-
从 github 克隆 discourse-math 到 /var/discourse/plugins/discourse-math。launcher rebuild 没有提到 discourse-math,并且在 docker 挂载中也没有 discourse-math,在 GUI 中也没有。所以我猜 plugins 文件夹被忽略了?
-
我也尝试克隆到 /var/discourse 之外的另一个目录,并将其符号链接到 /var/discourse/plugins/discourse-math… 结果相同。
-
在 /var/discourse-math.git 中克隆了 github 仓库,并编辑了我的 app.yml,使其显示为 - git clone file:////var/discourse-math.git,但随后 launcher rebuild 抱怨 fatal: '/var/discourse-math.git' does not appear to be a git repository … 据说 launcher 已经在 docker 容器中运行了这个命令?手动运行 cd /tmp \u0026\u0026 git clone file:////var/discourse-math.git 可以正常工作。
plugins 目录位于 Docker 容器外部并已挂载。
因此,如果您在 ~/discourse 中运行 discourse Docker,则可以在本地将插件克隆或符号链接到 ~discourse/plugins。
nordize
(Nordize)
3
@merefield 但那正是我已经做过的(见我的消息),而且没有奏效……我错过了什么?
要重新加载插件,您需要重启 docker 容器 使用相应的命令。
nordize
(Nordize)
5
./launcher rebuild app 不应该能做到吗?
那是用于生产环境、远程安装的。
如果您说的是本地安装,您应该考虑我链接的 开发 Docker 安装。
在本地运行生产环境安装有点……奇怪。
nordize
(Nordize)
7
好的,是的,我知道开发安装,但我有一个标准的 Docker 安装(即非开发安装),所以我想我的问题仍然存在:我是否可以从本地目录侧载插件,还是只能通过 app.yml 从 GitHub 远程加载?
附注:我清楚“正确”的流程是进行开发安装并在那里进行操作。我想找一种快速简单的方法来修改和测试插件,而不是经历完整的开发安装和设置的痛苦。
明白了,你这个不寻常的设置让我有点懵。
生产环境的安装会将插件克隆到容器中,因此不适合本地插件开发,因为该工作流程需要你将更改上传到 GitHub。
我的建议是放弃那个设置,使用两个主要的开发选项之一:Docker 或非 Docker。
nordize
(Nordize)
9
只是为了确保我理解正确:您是指克隆远程 GitHub 插件,而不能从本地目录克隆,即使是通过 github file:///? 我认为 launcher.sh 在那个时候是在容器中运行,而不是在主机上运行,也就是说,在容器中从 GitHub 克隆,而不是从主机克隆到主机的挂载文件夹……这会允许我 git clone file:///…
如果您想将生产安装变成一个能够访问本地挂载目录的“弗兰肯斯坦”,您需要更改构建脚本以授予它该访问权限。您需要自行负责支持这些自定义。
恕我直言,您只是在给自己制造麻烦和脆弱性。
Docker 开发安装正是为了给您提供一个低维护的解决方案,以实现高效的本地插件开发,请考虑使用它。
nordize
(Nordize)
11
我知道,你当然是对的。这是为了在插件的 JavaScript 文件中进行一个简单的更改以进行测试。我直接在容器中进行了编辑(/var/www/discourse/public/assets/plugins/discourse-math-.js),但由于某种原因,我的编辑没有在浏览器中反映出来——浏览器看到的是旧文件,尽管我清理了缓存,这可能是因为插件的 JS 文件被嵌入的 Nginx 缓存了(?)。
如果你能给我一个在容器中编辑当前 JS 文件(听起来很别扭)并使其在浏览器中可见的方法,我将不胜感激。
我可能已经陷入了“没时间写一封简短的信”的境地……我没有时间走正确的开发者安装路线,而且我没想到在容器中修改一个 JS 文件会这么难(没时间阅读 Discourse 如何缓存插件 JS 文件以使我的更改在浏览器中可见),等等等等。
如果只是一个 js 文件,你可以将其部署在主题组件中。
主题组件可以被复制到一个站点,只要它可以通过 discourse_theme gem 通过 https 访问。
你甚至可以使用现有的远程生产站点来实现此目的,无需设置本地站点。
请参阅 Discourse 主题 CLI(帮助你构建主题的控制台应用程序)- howto / developers - Discourse Meta
1 个赞
nordize
(Nordize)
13
这是现有插件(即初始化程序)的 js 文件,我想对其进行修改。主题组件无济于事(除非我误解了您的意思)。
主题组件最后加载,我认为,所以会覆盖插件。
另一个好选择是直接 fork 该插件,在本地克隆它以进行修改和测试,使用本地的 dev 安装(;))。一旦满意,提交并推送到你的 fork,然后将 fork 用于生产。
但是,主题组件解决方案的优点是您不必维护一个 fork,因为父插件的演变可能会带来麻烦。
nordize
(Nordize)
15
我不确定主题组件是否能帮助我修改像 这个 这样的文件……据我所知,该文件(以及其他文件)会通过映射器等处理,生成浏览器加载的容器的 /var/www/discourse/public/applets/plugins/discourse-math-\\\u003cid\\\u003e.js 文件。我只需要更改后者,但浏览器仍然看到旧文件,就好像有服务器端缓存一样。
本地开发安装耗时且麻烦,但如果其他方法都失败了,我可能会这样做。我没想到修改插件的 JS 文件会如此痛苦。我仍然不明白为什么我的直接编辑在浏览器中不可见,除非容器的 Nginx 有服务器端缓存(鉴于这是一个 JS 文件,我不知道为什么会有缓存)。
总之,我今天用于研究这个问题的时间已经结束了 :(。无论如何,感谢您的帮助!
1 个赞
没问题。
我无法深入了解您想实现的目标,但为了确保一个初始化器在另一个之后运行,请使用 after: 参数,例如:
(鸣谢 @angus)
开发工具已经为此目的进行了演进,所以如果可以的话,请使用它。开发 Docker 环境的设置应该只需要几分钟,而不是几个小时,而且您只需要设置一次,之后它就可以用于各种目的。不要因为熟悉生产环境的安装方式就诱惑自己将其用于本地!
它根本没有为此目的进行配置。
1 个赞
nordize
(Nordize)
17
叫我笨蛋,但我该如何将默认端口 3000 更改为其他端口?d/boot-dev --init 因我正在使用该端口处理其他事务而失败。我尝试了 -e UNICORN_PORT=4200。我看到的指南中没有关于端口的信息。config/cloud/cloud66/files 中的 thin.yml 文件似乎也被忽略了
Ruby 服务器端口是 3000,Ember 端口是 4200。两个进程都需要运行。您可以通过 4200 在浏览器中访问该网站。是否最好在 dev docker 主题中讨论 dev docker 安装?
nordize
(Nordize)
19
嗯,d/boot_dev --init 失败(Error starting userland proxy: listen tcp 127.0.0.1:3000: bind: address already in use.)。也许我以后会进一步研究。感谢您的时间。我希望这些东西能有更好的文档记录。
听起来正是如此。您已经在端口 3000 上运行了一个进程。将其终止。
lsof -wni tcp:3000 将列出使用该端口的进程。