3

在 go buffalo 中,有一个生成的 .gitignore 文件忽略公共/资产。然而,与此同时,生成的 css 和 js 对于获得“真正的”水牛应用程序至关重要。所以,有一个我不完全理解的脱节,即默认情况下,任何构建应用程序本身的版本控制系统必然会丢失一些对部署应用程序至关重要的东西。

我注意到了什么

  • buffalo build 不会在公共/资产中生成内容。

  • buffalo dev 也不会生成此内容。

  • 删除后运行 buffalo devpublic/assets/*会导致站点没有任何 CSS,这意味着它会破坏功能。

所以,就这样。据我所知, /public/assets 既是必要的,也是非动态创建的。

因此,我的问题是,如何在构建时在我的 buffalo 工作流程中重新生成公共/资产(即如何保留 .gitignore 默认值),或者如果不在版本控制中,人们通常在哪里打包他们的资产?

4

2 回答 2

2

因此,要回答在哪里生成公共/资产的原始问题 - 答案是“在创建时”或“在构建时,如果你没有它们,并且如果你引导空目录”。希望在合并下面提到的 PR 之后,这个问题的答案将是“在创建时,或者在构建时,如果它们不存在于您的存储库中(即因为它们被 gitignored)”。

这两点(为什么本地构建不生成它们 + 为什么 docker build 不生成它们)具有完全不相关且不同的答案,因此我将分别用单独的项目符号处理它们。

  • 我们发现实际上,根据您的存储库的状态,如果您丢失/删除 webpack 文件,水牛环境不会为您重新生成它们,这无论如何都不是错误,因为它是一个有效的用例在不生成任何资产的情况下运行 buffalo(虽然这不是一个对我来说似乎非常有用的用例,但可能值得提出一个改变,让 buffalo 在这方面更加固执己见)。

  • 关于 docker build 本身,似乎如果您在运行 buffalo build之前mkdir添加一条语句以确保 public/assets 存在(即在您的 Dockerfile 中),那么您可以弥补您忽略该目录的事实,并且它将在静态构建中正确填充。

由于后一个用例更重要,我在 buffalo 的指导下创建了一个拉取请求来解决这个问题(即,使您不需要手动添加 mkdir public/assets 步骤)社区,可以在这里找到: https ://github.com/gobuffalo/buffalo/pull/1447 。

简而言之:在此 PR 合并之前,如果您需要您的资产来构建您的可部署项目(您可能会这样做),请从 gitignore 中删除 public/assets 行并将它们提交给版本控制,这样您的代码就可以直接构建而无需外部依赖项,或者只是确保在运行 buffalo dev 的同一位置构建代码。如果有第三个答案。从我的角度来看,前者是对云更友好的解决方案,但我是 buffalo 的新手,所以我可能在某些方面误解了这些习语。

免责声明:我回答这个问题是因为我认为它可能对人们有用,但我不是水牛专家。 关于资产如何在 buffalo 文档/网站 ( https://gobuffalo.io/en/docs/assets )上的工作,有更深入的技术观点

于 2018-11-08T03:54:57.620 回答
0

有源代码控制,其中包含您为应用程序创建的源代码,有构建服务器,它将源代码转换为可部署的工件,还有工件,其中包含运行应用程序所需的一切(即资源,编译的二进制文件) ,没有源代码)。

源代码控制通常是存储工件的较差解决方案;这就是为什么例如 GitHub 具有发布功能的原因。在源代码控制之外为您的工件找到合适的解决方案 - 您选择的内容取决于您的构建和操作环境以及您的部署系统。例如,S3 是存储内部构建工件的流行选择,因为它非常易于使用且相当便宜。

于 2018-11-07T16:26:23.010 回答