bug: public/embed.go error missing file dir on executing buffalo dev
chapmandu opened this issue · 2 comments
Description
Description
Running buffalo dev
after creating a new application causes exception.
Expected Behavior
Expect the command to be completed without exit.
Actual Behavior
Terminal output (snippet.. full output further down)
...
# buffet/public
public/embed.go:11:5: embed assets/keep: open public/assets/keep: no such file or directory
github.com/gobuffalo/buffalo-pop/v3/pop/popmw
buffalo: 2022/10/08 10:44:01 === Error! ===
buffalo: 2022/10/08 10:44:01 === exit status 2
...
Full terminal output
To Reproduce
buffalo new buffet --db-type sqlite3
buffalo dev
Executing buffalo dev
a second time will complete successfully, though it's not ideal.
Additional Context
OS: Linux Mint 20.3
Details
-> Go: Checking installation
✓ The `go` executable was found on your system at: /usr/local/go/bin/go
-> Go: Checking minimum version requirements
✓ Your version of Go, 1.18.4, meets the minimum requirements.
-> Go: Checking Package Management
✓ You are using Go Modules (`go`) for package management.
-> Go: Checking PATH
✓ Your PATH contains /home/adam/go/bin.
-> Node: Checking installation
✓ The `node` executable was found on your system at: /usr/local/bin/node
-> Node: Checking minimum version requirements
✓ Your version of Node, v16.17.1, meets the minimum requirements.
-> NPM: Checking installation
✓ The `npm` executable was found on your system at: /usr/local/bin/npm
-> NPM: Checking minimum version requirements
✓ Your version of NPM, 8.19.2, meets the minimum requirements.
-> Yarn: Checking installation
✓ The `yarnpkg` executable was found on your system at: /usr/local/bin/yarnpkg
-> Yarn: Checking minimum version requirements
✓ Your version of Yarn, 3.2.4, meets the minimum requirements.
-> PostgreSQL: Checking installation
✘ The `postgres` executable could not be found on your system.
For help setting up your Postgres environment please follow the instructions for you platform at:
https://www.postgresql.org/download/
-> MySQL: Checking installation
✓ The `mysql` executable was found on your system at: /usr/bin/mysql
-> MySQL: Checking minimum version requirements
✓ Your version of MySQL, 8.0.30, meets the minimum requirements.
-> SQLite3: Checking installation
✓ The `sqlite3` executable was found on your system at: /usr/bin/sqlite3
-> SQLite3: Checking minimum version requirements
✓ Your version of SQLite3, 3.31.1, meets the minimum requirements.
-> Cockroach: Checking installation
✘ The `cockroach` executable could not be found on your system.
For help setting up your Cockroach environment please follow the instructions for you platform at:
https://www.cockroachlabs.com/docs/stable/
-> Buffalo (CLI): Checking installation
✓ The `buffalo` executable was found on your system at: /usr/local/bin/buffalo
-> Buffalo (CLI): Checking minimum version requirements
✓ Your version of Buffalo (CLI), v0.18.8, meets the minimum requirements.
-> Buffalo: Application Details
Pwd /home/adam/code/goapps/buffet
Root /home/adam/code/goapps/buffet
GoPath /home/adam/go
PackagePkg buffet
ActionsPkg buffet/actions
ModelsPkg buffet/models
GriftsPkg buffet/grifts
WithModules true
Name buffet
Bin bin/buffet
VCS git
WithPop true
WithSQLite true
WithDep false
WithWebpack true
WithNodeJs true
WithYarn true
WithDocker true
WithGrifts true
AsWeb true
AsAPI false
InApp true
PackageJSON {map[build:webpack --mode production --progress dev:webpack --watch]}
-> Buffalo: config/buffalo-app.toml
name = "buffet"
bin = "bin/buffet"
vcs = "git"
with_pop = true
with_sqlite = true
with_dep = false
with_webpack = true
with_nodejs = true
with_yarn = true
with_docker = true
with_grifts = true
as_web = true
as_api = false
-> Buffalo: config/buffalo-plugins.toml
[[plugin]]
binary = "buffalo-pop"
go_get = "github.com/gobuffalo/buffalo-pop/v3@latest"
tags = ["sqlite"]
-> Buffalo: go.mod
module buffet
go 1.18
require (
github.com/gobuffalo/buffalo v1.0.1
github.com/gobuffalo/buffalo-pop/v3 v3.0.6
github.com/gobuffalo/envy v1.10.2
github.com/gobuffalo/grift v1.5.2
github.com/gobuffalo/mw-csrf v1.0.1
github.com/gobuffalo/mw-forcessl v1.0.1
github.com/gobuffalo/mw-i18n/v2 v2.0.2
github.com/gobuffalo/mw-paramlogger v1.0.1
github.com/gobuffalo/pop/v6 v6.0.8
github.com/gobuffalo/suite/v4 v4.0.3
github.com/unrolled/secure v1.13.0
)
require (
github.com/BurntSushi/toml v1.2.0 // indirect
github.com/Masterminds/semver/v3 v3.1.1 // indirect
github.com/aymerick/douceur v0.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dustin/go-humanize v1.0.0 // indirect
github.com/fatih/color v1.13.0 // indirect
github.com/fatih/structs v1.1.0 // indirect
github.com/felixge/httpsnoop v1.0.1 // indirect
github.com/fsnotify/fsnotify v1.5.4 // indirect
github.com/go-sql-driver/mysql v1.6.0 // indirect
github.com/gobuffalo/events v1.4.3 // indirect
github.com/gobuffalo/fizz v1.14.4 // indirect
github.com/gobuffalo/flect v0.3.0 // indirect
github.com/gobuffalo/github_flavored_markdown v1.1.3 // indirect
github.com/gobuffalo/helpers v0.6.7 // indirect
github.com/gobuffalo/httptest v1.5.2 // indirect
github.com/gobuffalo/logger v1.0.7 // indirect
github.com/gobuffalo/meta v0.3.3 // indirect
github.com/gobuffalo/nulls v0.4.2 // indirect
github.com/gobuffalo/plush/v4 v4.1.16 // indirect
github.com/gobuffalo/refresh v1.13.2 // indirect
github.com/gobuffalo/tags/v3 v3.1.4 // indirect
github.com/gobuffalo/validate/v3 v3.3.3 // indirect
github.com/gofrs/uuid v4.3.0+incompatible // indirect
github.com/gorilla/css v1.0.0 // indirect
github.com/gorilla/handlers v1.5.1 // indirect
github.com/gorilla/mux v1.8.0 // indirect
github.com/gorilla/securecookie v1.1.1 // indirect
github.com/gorilla/sessions v1.2.1 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/jackc/chunkreader/v2 v2.0.1 // indirect
github.com/jackc/pgconn v1.13.0 // indirect
github.com/jackc/pgio v1.0.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgproto3/v2 v2.3.1 // indirect
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect
github.com/jackc/pgtype v1.12.0 // indirect
github.com/jackc/pgx/v4 v4.17.2 // indirect
github.com/jmoiron/sqlx v1.3.5 // indirect
github.com/joho/godotenv v1.4.0 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/luna-duclos/instrumentedsql v1.1.3 // indirect
github.com/mattn/go-colorable v0.1.9 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/mattn/go-sqlite3 v1.14.15 // indirect
github.com/microcosm-cc/bluemonday v1.0.20 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/monoculum/formam v3.5.5+incompatible // indirect
github.com/nicksnyder/go-i18n v1.10.1 // indirect
github.com/pelletier/go-toml v1.2.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rogpeppe/go-internal v1.9.0 // indirect
github.com/sergi/go-diff v1.2.0 // indirect
github.com/sirupsen/logrus v1.9.0 // indirect
github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d // indirect
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e // indirect
github.com/spf13/cobra v1.5.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/stretchr/testify v1.8.0 // indirect
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect
golang.org/x/net v0.0.0-20221002022538-bcab6841153b // indirect
golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0 // indirect
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect
golang.org/x/text v0.3.7 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
(I added <details>
tag in your original post to make it short and can see the details when it is required)
Thanks for the report.
I think the issue is a side effect of the behavior of Webpack and the workaround for embed. The missing file keep
is a kind of placeholder to make embed
runs without error even if the directory is initially empty, but I found the file was removed after Webpack runs. (As far as I remember, this behavior is somewhat different than before.) The sequence was maybe,
- buffalo dev executed Webpack and go build
go build
detected file list for assets (including keep)- Webpack removes all existing files including keep
- go build tried to read the file but it was just removed by webpack
As described above, it seems like Webpack removes all pre-existing files when it dumps its new files into the assets
directory. The next time, the file keep
is not an issue anymore, but this issue could happen again because the other asset files could be in the same situation.
I will check it in more detail.
Found the root cause:
was introduced to fix the other issue by gobuffalo/cli#71 and it made Webpack removes all existing files under the target destination directory by default. (https://webpack.js.org/guides/output-management/#cleaning-up-the-dist-folder)
Since this issue happens randomly, just ignoring the error could be one option for now, or removing the config clean: true
from the webpack.config.js
could be another option if the issue happens frequently.
FYI, buffalo build
command has an option --clean-assets
for cleaning the asset directory when it builds a binary.
I will keep this issue open and will revisit again to find a better solution.