# 开发：符号链接层级过多 - 监视失败

**URL:** <https://meta.discourse.org/t/development-too-many-levels-of-symbolic-links-failed-to-watch/388162>\
**Category:** Development\
**Created:** [2025年十一月11日 17:07 UTC](https://meta.discourse.org/t/development-too-many-levels-of-symbolic-links-failed-to-watch/388162 "2025-11-11T17:07:19Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2025年十一月11日 17:07 UTC](https://meta.discourse.org/t/development-too-many-levels-of-symbolic-links-failed-to-watch/388162/1 "2025-11-11T17:07:19Z")

</div>

启动时我一直遇到这个错误

我通过执行以下操作来“修复”它：

```
find ~/src/discourse-repos/discourse/plugins/ -type l |xargs rm

```

这是我遇到的问题吗？

````plaintext
Starting CSS change watcher
/home/pfaffman/.asdf/installs/ruby/3.3.8/lib/ruby/gems/3.3.0/gems/rb-inotify-0.11.1/lib/rb-inotify/watcher.rb:74:in `initialize': Too many levels of symbolic links - Failed to watch "/h\nome/pfaffman/src/discourse-repos/discourse/plugins/chat/public/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e423\n7ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e423\n7ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca\n50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1\nb1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/833426b67385a5876ca0e17e82fe3571/833426b67385a5876ca0e17e82fe3571/833426b67385a5876ca0e17e82fe3571/41a1b1e4237ade4d3c9b840f\n2f23ca50/833426b67385a5876ca0e17e82fe3571/41a1b1e4237ade4d3c9b840f2f23ca50/833426b67385a5876ca0e17e82fe3571/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237ade4d3c9b840f2f23ca50/41a1b1e4237\nade4d3c9b840f2f23ca50/833426b67385a5876ca0e17e82fe3571/833426b67385a5876ca0e17e82fe3571\" (Errno::ELOOP)\n```"
````

---

<div class="post-metadata">

**Author:** ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)\
**Post date:** [2025年十一月11日 17:10 UTC](https://meta.discourse.org/t/development-too-many-levels-of-symbolic-links-failed-to-watch/388162/2 "2025-11-11T17:10:22Z")

</div>

> [@pfaffman](#):
>
> `plugins/chat/public/41a1b1e4237ade4d3c9b840f2f23ca50`

chat 插件的 `/public/` 文件夹中的该子文件夹不应存在。您可以将其删除。（它不在 git 仓库中。）

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2025年十一月11日 17:12 UTC](https://meta.discourse.org/t/development-too-many-levels-of-symbolic-links-failed-to-watch/388162/3 "2025-11-11T17:12:54Z")

</div>

我每次都使用上面的 `find` 命令将其删除。它是自动创建的。我不知道是什么在创建它，也不知道为什么。

上面 `find` 命令的问题是，它还会删除我试图开发的、链接到文件系统中其他位置的插件。

---

<div class="post-metadata">

**Author:** ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)\
**Post date:** [2025年十一月11日 17:15 UTC](https://meta.discourse.org/t/development-too-many-levels-of-symbolic-links-failed-to-watch/388162/4 "2025-11-11T17:15:20Z")

</div>

嗯……我本地没见过这个。你运行本地服务器是作为开发环境，对吧？而不是生产环境？

也许是某个特定的 gem/插件引起的……一种找出原因的方法是，只运行核心插件的本地 Discourse 实例，然后逐一添加其他插件，直到找到导致此行为的插件。（如果确实是插件引起的……不确定是不是，但值得一试。）

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2025年十一月11日 17:18 UTC](https://meta.discourse.org/t/development-too-many-levels-of-symbolic-links-failed-to-watch/388162/5 "2025-11-11T17:18:31Z")

</div>

是的，这是在 Linux 上的开发安装。

`find` 命令会删除所有插件。我猜是某些东西出于某种原因创建了它们，当我按 `^C` 停止服务器时，它们就被留下了。

编辑：这是不删除插件的 `find` 命令：

```
find plugins/ -type l | grep public | xargs rm -v

```

---

<div class="post-metadata">

**Author:** ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)\
**Post date:** [2025年十一月11日 17:30 UTC](https://meta.discourse.org/t/development-too-many-levels-of-symbolic-links-failed-to-watch/388162/6 "2025-11-11T17:30:10Z")

</div>

在插件的 `public/` 目录中也没有类似的东西。

符号链接指向哪里？有什么线索可以说明它有什么用处吗？

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2025年十一月11日 17:34 UTC](https://meta.discourse.org/t/development-too-many-levels-of-symbolic-links-failed-to-watch/388162/7 "2025-11-11T17:34:17Z")

</div>

> [@david](#):
>
> 我的插件 `public/` 目录里也没有类似的东西。

我的天。难道我又遇到了什么奇怪的“机器幽灵”？ 😿

它们都指向它们的父目录——`public`。我不知道它们是用来做什么的。它们是几周前才开始出现的。

```plaintext
 (main) pfaffman@noreno:~/src/discourse-repos/discourse/plugins$ find . -type l|xargs ls -dl
lrwxrwxrwx 1 pfaffman pfaffman 64 Nov 11 11:22 ./chat/public/1d52c770cd80e083a3718789d1605413 -> /home/pfaffman/src/discourse-repos/discourse/plugins/chat/public
lrwxrwxrwx 1 pfaffman pfaffman 72 Nov 11 11:22 ./discourse-ai/public/b40846a97cdbd0274c3dd7eb54988250 -> /home/pfaffman/src/discourse-repos/discourse/plugins/discourse-ai/public
lrwxrwxrwx 1 pfaffman pfaffman 78 Nov 11 11:22 ./discourse-graphviz/public/b8f3dbf1fd6ee55e3c23d77c83be2c05 -> /home/pfaffman/src/discourse-repos/discourse/plugins/discourse-graphviz/public
lrwxrwxrwx 1 pfaffman pfaffman 73 Nov 11 11:22 ./discourse-lti/public/84caf37dcddbb7cf6a217ab898027cfb -> /home/pfaffman/src/discourse-repos/discourse/plugins/discourse-lti/public
lrwxrwxrwx 1 pfaffman pfaffman 74 Nov 11 11:22 ./discourse-math/public/e38b84b0cb39c3d5b97724bc8b4b6f2f -> /home/pfaffman/src/discourse-repos/discourse/plugins/discourse-math/public
lrwxrwxrwx 1 pfaffman pfaffman 83 Nov 11 11:22 ./discourse-narrative-bot/public/32819192a75a2ed5cbca7f9ba15601cb -> /home/pfaffman/src/discourse-repos/discourse/plugins/discourse-narrative-bot/public
lrwxrwxrwx 1 pfaffman pfaffman 77 Nov 11 11:22 ./discourse-patreon/public/8de4d88071a4dddf83fff5390605465f -> /home/pfaffman/src/discourse-repos/discourse/plugins/discourse-patreon/public
lrwxrwxrwx 1 pfaffman pfaffman 51 Nov 11 11:22 ./discourse-pfaffmanager -> /home/pfaffman/src/pfaffman/discourse-pfaffmanager/
lrwxrwxrwx 1 pfaffman pfaffman 70 Nov 11 11:22 ./styleguide/public/a8a42b154ba5868280256ba6040a2119 -> /home/pfaffman/src/discourse-repos/discourse/plugins/styleguide/public

```

现在我遇到了这个：

```plaintext
find plugins/ -type l | grep public | xargs rm -v
#~/.kill_ember
# 注意：你必须改变顺序，而不是注释掉它们！
UNICORN_WORKERS=1 \
UNICORN_SIDEKIQS=0 \
DISCOURSE_DEV_ALLOW_ANON_TO_IMPERSONATE=1 \
DISCOURSE_MAXMIND_LICENSE_KEY=zLjQgCjCmGeguCIy \
DISCOURSE_DISCOURSE_SUBSCRIPTIONS_SECRET_KEY=sk_test \
DISCOURSE_DISCOURSE_SUBSCRIPTIONS_PUBLIC_KEY=pk_test \
DISCOURSE_DISCOURSE_SUBSCRIPTIONS_SECRET_KEY=sk_live \
DISCOURSE_DISCOURSE_SUBSCRIPTIONS_PUBLIC_KEY=pk_live \
DISCOURSE_DISCOURSE_SUBSCRIPTIONS_ENABLED=true \
DISCOURSE_DISCOURSE_SUBSCRIPTIONS_EXTRA_NAV_SUBSCRIBE=true \
DISCOURSE_S3_ACCESS_KEY_ID=6ZA6XODWYCA3ALIZB2CA \
DISCOURSE_S3_SECRET_ACCESS_KEY="x" \
DISCOURSE_S3_BACKUP_BUCKET="buck" \
DISCOURSE_BACKUP_LOCATION="s3" \
DISCOURSE_S3_ENDPOINT="https://sfo3.digitaloceanspaces.com" \
DISCOURSE_S3_REGION=whatever \
DISCOURSE_FORCE_HTTPS=false \
DISCOURSE_TITLE="Staging/development" \
timeout --foreground -k 15s 60m $COMMAND $*

```

但现在这样也不再奏效了。我遇到了这个：

```plaintext
Going to run: /home/pfaffman/src/discourse-repos/discourse/bin/rails s
removed 'plugins/chat/public/a5ae10937f40d49cff9c68ff76a72d99'
removed 'plugins/discourse-math/public/f25cafd9c7e5954c858294d80efdacb3'
removed 'plugins/discourse-graphviz/public/f7ab86524adec9500bf4dec9e95694cd'
removed 'plugins/discourse-lti/public/46a2de0d0a87b37acf83d5ee2143484e'
removed 'plugins/discourse-ai/public/e07e3c8844bc668fb0588b87e14d1e6f'
removed 'plugins/discourse-patreon/public/72ee56353e75ed5d55eb95397e84a355'
removed 'plugins/styleguide/public/1f55952c7d509e59355ec6b46cca8f6d'
removed 'plugins/discourse-narrative-bot/public/454d4eb93f5174651ee8ea306ed4be4c'
I, [2025-11-11T13:52:36.976738 #613360] INFO -- : Refreshing Gem list
Starting CSS change watcher
<internal:dir>:184:in `open': Too many levels of symbolic links @ dir_initialize - /home/pfaffman/src/discourse-repos/discourse/plugins/discourse-math/public/89122751ccaa836c9ede2b5bb5b
917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa83
6c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2
b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/8
9122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b9
17df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836c9ede2b5bb5b917df/89122751ccaa836
c9ede2b5bb5b917df/mathjax/jax/output/SVG/fonts/Latin-Modern/NonUnicode/Regular (Errno::ELOOP)

```

所以它删除了其中一个文件，但又创建了另一个？

[ask.discourse.org](http://ask.discourse.org) 上说：

> [@DiscourseHelper](#):
>
> 你在 Discourse 插件目录中看到的符号链接（在 `public/` 目录内带有哈希状名称）是由 Discourse 在开发服务器运行时自动创建的。这种行为是设计使然，它支持 Discourse 如何从每个插件提供插件静态资源（如图像、JavaScript 等）。

我尝试使用 `bin/dev` 而不是 `ember-cli` 和 `bin/rails s`。这似乎解决了最新的问题，但用 ^c 退出时仍然会留下那些符号链接。

我不明白为什么没有其他人遇到这个问题。
