最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

链接文件夹产生奇怪的结果

IT培训 admin 3浏览 0评论

链接文件夹产生奇怪的结果

我想了解linked_dirs是如何工作的。我有以下作为一个例子

追加:linked_dirs,“storage”,“node_modules”,“vendor”,“public”

以上原因导致一些问题:

1:如果我在链接的dirs中保留“public”,则在初始部署时,公共文件夹缺少git存储库中存在的大量文件。例如,如果没有在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,因为在初始部署时它不存在并且它返回一个错误:

00:02 deploy:check:linked_files错误链接文件/var/www/xxx/shared/public/mix-manifest.json在xxx上不存在

2:这与上面的node_modules类似

如果我们在尝试运行npm run时共享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指向一个符号链接。

知道在上面的场景中可以做些什么吗?

谢谢。

回答如下:

当您在linked_dirs中指定目录或在linked_files中指定文件时,您正在指示Capistrano这些资源的权威版本/内容位于shared目录中。隐含地意味着不会使用git中相应的文件夹/文件。

对于链接目录,共享版本开始完全为空。假设它是由构建过程或应用程序本身运行时填充的。

两个常见例子说明了这一点

  1. public/system经常被链接为放置文件上传的位置。当用户将图像上传到应用程序时,它们存储在共享位置,因此可供将来部署使用。
  2. public/assetstmp通常用于存储assets:precomplie的输出和缓存。这加快了未来部署中的预编译步骤。

重要的是,你永远不会检查public/systemtmppublic/assets到git。 Capistrano没有机制将git中的内容与shared中的内容合并。 shared位置获胜。事实上,每次进行部署时,Capistrano都会删除指定的文件/目录(如果它们存在于git中),然后再用符号链接替换它们。

总结一下:

  • linked_fileslinked_dirs告诉Capistrano:“忽略这些文件/目录中的git;使用我在shared中提供的那些”。
  • 如果在linked_files中指定了某些内容,则必须在部署之前在shared中创建它。否则Capistrano无法链接到。
  • 对于linked_dirs,如果Capistrano找不到要链接的指定目录,它将创建一个空目录以方便使用。
  • 在部署期间,Capistrano将已部署代码的符号链接创建到shared中。如果已部署的代码中已存在linked_fileslinked_dirs中的任何一个,则在添加符号链接之前将完全删除它们。
  • 永远不应该将链接的文件/文件夹签入git。

链接文件夹产生奇怪的结果

我想了解linked_dirs是如何工作的。我有以下作为一个例子

追加:linked_dirs,“storage”,“node_modules”,“vendor”,“public”

以上原因导致一些问题:

1:如果我在链接的dirs中保留“public”,则在初始部署时,公共文件夹缺少git存储库中存在的大量文件。例如,如果没有在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,因为在初始部署时它不存在并且它返回一个错误:

00:02 deploy:check:linked_files错误链接文件/var/www/xxx/shared/public/mix-manifest.json在xxx上不存在

2:这与上面的node_modules类似

如果我们在尝试运行npm run时共享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指向一个符号链接。

知道在上面的场景中可以做些什么吗?

谢谢。

回答如下:

当您在linked_dirs中指定目录或在linked_files中指定文件时,您正在指示Capistrano这些资源的权威版本/内容位于shared目录中。隐含地意味着不会使用git中相应的文件夹/文件。

对于链接目录,共享版本开始完全为空。假设它是由构建过程或应用程序本身运行时填充的。

两个常见例子说明了这一点

  1. public/system经常被链接为放置文件上传的位置。当用户将图像上传到应用程序时,它们存储在共享位置,因此可供将来部署使用。
  2. public/assetstmp通常用于存储assets:precomplie的输出和缓存。这加快了未来部署中的预编译步骤。

重要的是,你永远不会检查public/systemtmppublic/assets到git。 Capistrano没有机制将git中的内容与shared中的内容合并。 shared位置获胜。事实上,每次进行部署时,Capistrano都会删除指定的文件/目录(如果它们存在于git中),然后再用符号链接替换它们。

总结一下:

  • linked_fileslinked_dirs告诉Capistrano:“忽略这些文件/目录中的git;使用我在shared中提供的那些”。
  • 如果在linked_files中指定了某些内容,则必须在部署之前在shared中创建它。否则Capistrano无法链接到。
  • 对于linked_dirs,如果Capistrano找不到要链接的指定目录,它将创建一个空目录以方便使用。
  • 在部署期间,Capistrano将已部署代码的符号链接创建到shared中。如果已部署的代码中已存在linked_fileslinked_dirs中的任何一个,则在添加符号链接之前将完全删除它们。
  • 永远不应该将链接的文件/文件夹签入git。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论