链接文件夹产生奇怪的结果
Linked Folders produces strange results
我正在尝试了解 linked_dirs 的工作原理。我有以下例子
追加:linked_dirs、"storage"、"node_modules"、"vendor"、"public"
以上会导致一些问题:
1:如果我将 "public" 保留在 linked 目录中,在初始部署时 public 文件夹会丢失 [=58] 中存在的许多文件=] 存储库。例如,没有 linked_dirs 中列出的 "public" 我在 current/public 中得到以下树:
[git@web003 current]$ ls -lh public/
total 52K
drwxrwxr-x 3 git git 4.0K Dec 12 16:48 custom
-rw-rw-r-- 1 git git 0 Dec 12 16:48 favicon.ico
drwxrwxr-x 2 git git 4.0K Dec 12 16:48 fonts
drwxrwxr-x 4 git git 4.0K Dec 12 16:48 rsvp
drwxrwxr-x 2 git git 4.0K Dec 12 16:48 images
-rw-rw-r-- 1 git git 2.7K Dec 12 16:48 index.php
-rw-rw-r-- 1 git git 1.2K Dec 12 16:48 manifest.json
drwxrwxr-x 8 git git 4.0K Dec 12 16:48 maverick
-rw-rw-r-- 1 git git 26 Dec 12 18:43 mix-manifest.json
drwxrwxr-x 15 git git 4.0K Dec 12 18:43 modules
-rw-rw-r-- 1 git git 24 Dec 12 16:48 robots.txt
-rw-rw-r-- 1 git git 781 Dec 12 16:48 serviceWorker.js
drwxr-xr-x 4 git git 4.0K Dec 12 18:43 vendor
-rw-rw-r-- 1 git git 914 Dec 12 16:48 web.config
在 linked_dirs 中设置 "public" 我在 current/public
中有以下目录树
[git@web003 public]$ ls -lh
total 12K
-rw-rw-r-- 1 git git 26 Dec 12 17:16 mix-manifest.json
drwxrwxr-x 15 git git 4.0K Dec 12 17:16 modules
drwxr-xr-x 4 git git 4.0K Dec 12 17:16 vendor
缺少了很多,我不完全确定为什么。另外 mix_manifest.js 是一个文件,当我们 运行 一些编译脚本时生成和更新,我希望共享它,但似乎我无法将它添加到 linked_files 因为从初始部署它不存在并且 returns 一个错误:
00:02 deploy:check:linked_files
错误 linked 文件 /var/www/xxx/shared/public/mix-manifest.json 在 xxx
上不存在
2:这与上面的类似,只是 node_modules
如果我们在尝试 运行 npm 运行 时共享 node_modules... 似乎无法找到某些文件,例如
npm run w-production // shortcut for:
cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js "--env.mixfile=build/w.mix" "--env.scss=1"
如果 node_modules 未共享,则工作正常。如果它是共享的,它什么也不编译,因为它似乎无法真正找到合适的文件,因为 node_modules 指向一个符号 link.
知道在上述情况下可以做什么吗?
谢谢。
当您在 linked_dirs
中指定目录或在 linked_files
中指定文件时,您是在指示 Capistrano authoritative versions/contents资源位于 shared
目录中。这意味着 git 中相应的 folders/files 将不会被使用。
在 linked 目录的情况下,共享版本开始时完全是空的。假设它由构建过程或应用程序本身在运行时填充。
两个常见的例子说明了这一点:
public/system
通常被 link 编辑为放置文件上传的位置。当用户将图像上传到应用程序时,它们会存储在一个共享位置,因此可供未来部署访问。
public/assets
和 tmp
通常 link 用于存储 assets:precomplie
的输出和缓存。这加快了未来部署中的预编译步骤。
重要的是,您永远不会将 public/system
、tmp
或 public/assets
签入到 git。 Capistrano 没有机制将 git 中的内容与 shared
中的内容合并。 shared
位置获胜。事实上,每次部署时,Capistrano 删除 指定的 files/directory(如果它们存在于 git 中),然后用 symlink 替换它们s.
总结一下:
linked_files
和 linked_dirs
告诉 Capistrano:"ignore whatever is in git for these files/directories; use the ones I provide in shared
instead".
- 如果您在
linked_files
中指定了某些内容,则必须在部署前在 shared
中创建它。否则 Capistrano 没有什么可以 link 到。
- 对于
linked_dirs
,如果Capistrano找不到指定的目录link,为了方便,它会创建一个空目录。
- 在部署期间,Capistrano 从部署的代码中创建 symlinks 到
shared
。如果 linked_files
和 linked_dirs
中的任何一个已经存在于部署的代码中,它们将在添加 symlink 之前被完全删除。
- 链接的 files/folders 永远不应签入 git。
我正在尝试了解 linked_dirs 的工作原理。我有以下例子
追加:linked_dirs、"storage"、"node_modules"、"vendor"、"public"
以上会导致一些问题:
1:如果我将 "public" 保留在 linked 目录中,在初始部署时 public 文件夹会丢失 [=58] 中存在的许多文件=] 存储库。例如,没有 linked_dirs 中列出的 "public" 我在 current/public 中得到以下树:
[git@web003 current]$ ls -lh public/
total 52K
drwxrwxr-x 3 git git 4.0K Dec 12 16:48 custom
-rw-rw-r-- 1 git git 0 Dec 12 16:48 favicon.ico
drwxrwxr-x 2 git git 4.0K Dec 12 16:48 fonts
drwxrwxr-x 4 git git 4.0K Dec 12 16:48 rsvp
drwxrwxr-x 2 git git 4.0K Dec 12 16:48 images
-rw-rw-r-- 1 git git 2.7K Dec 12 16:48 index.php
-rw-rw-r-- 1 git git 1.2K Dec 12 16:48 manifest.json
drwxrwxr-x 8 git git 4.0K Dec 12 16:48 maverick
-rw-rw-r-- 1 git git 26 Dec 12 18:43 mix-manifest.json
drwxrwxr-x 15 git git 4.0K Dec 12 18:43 modules
-rw-rw-r-- 1 git git 24 Dec 12 16:48 robots.txt
-rw-rw-r-- 1 git git 781 Dec 12 16:48 serviceWorker.js
drwxr-xr-x 4 git git 4.0K Dec 12 18:43 vendor
-rw-rw-r-- 1 git git 914 Dec 12 16:48 web.config
在 linked_dirs 中设置 "public" 我在 current/public
中有以下目录树[git@web003 public]$ ls -lh
total 12K
-rw-rw-r-- 1 git git 26 Dec 12 17:16 mix-manifest.json
drwxrwxr-x 15 git git 4.0K Dec 12 17:16 modules
drwxr-xr-x 4 git git 4.0K Dec 12 17:16 vendor
缺少了很多,我不完全确定为什么。另外 mix_manifest.js 是一个文件,当我们 运行 一些编译脚本时生成和更新,我希望共享它,但似乎我无法将它添加到 linked_files 因为从初始部署它不存在并且 returns 一个错误:
00:02 deploy:check:linked_files 错误 linked 文件 /var/www/xxx/shared/public/mix-manifest.json 在 xxx
上不存在2:这与上面的类似,只是 node_modules
如果我们在尝试 运行 npm 运行 时共享 node_modules... 似乎无法找到某些文件,例如
npm run w-production // shortcut for:
cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js "--env.mixfile=build/w.mix" "--env.scss=1"
如果 node_modules 未共享,则工作正常。如果它是共享的,它什么也不编译,因为它似乎无法真正找到合适的文件,因为 node_modules 指向一个符号 link.
知道在上述情况下可以做什么吗?
谢谢。
当您在 linked_dirs
中指定目录或在 linked_files
中指定文件时,您是在指示 Capistrano authoritative versions/contents资源位于 shared
目录中。这意味着 git 中相应的 folders/files 将不会被使用。
在 linked 目录的情况下,共享版本开始时完全是空的。假设它由构建过程或应用程序本身在运行时填充。
两个常见的例子说明了这一点:
public/system
通常被 link 编辑为放置文件上传的位置。当用户将图像上传到应用程序时,它们会存储在一个共享位置,因此可供未来部署访问。public/assets
和tmp
通常 link 用于存储assets:precomplie
的输出和缓存。这加快了未来部署中的预编译步骤。
重要的是,您永远不会将 public/system
、tmp
或 public/assets
签入到 git。 Capistrano 没有机制将 git 中的内容与 shared
中的内容合并。 shared
位置获胜。事实上,每次部署时,Capistrano 删除 指定的 files/directory(如果它们存在于 git 中),然后用 symlink 替换它们s.
总结一下:
linked_files
和linked_dirs
告诉 Capistrano:"ignore whatever is in git for these files/directories; use the ones I provide inshared
instead".- 如果您在
linked_files
中指定了某些内容,则必须在部署前在shared
中创建它。否则 Capistrano 没有什么可以 link 到。 - 对于
linked_dirs
,如果Capistrano找不到指定的目录link,为了方便,它会创建一个空目录。 - 在部署期间,Capistrano 从部署的代码中创建 symlinks 到
shared
。如果linked_files
和linked_dirs
中的任何一个已经存在于部署的代码中,它们将在添加 symlink 之前被完全删除。 - 链接的 files/folders 永远不应签入 git。