如何修复Google-cloud-sdk 156.0.0“您的应用程序中有太多文件需要对所有文件进行更改才能进行监控。”?

时间:2017-05-26 18:45:35

标签: google-app-engine go

我刚刚在osX上安装了Go 1.6.4和google-cloud-sdk 1.56.0.0。

当我尝试运行本地dev_server时,我收到以下警告。

/Users/Bryan/go/src/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/mtime_file_watcher.py:156:用户警告:您的应用中有太多文件无法全部更改他们被监控。您可能必须重新启动开发服务器才能看到对文件的某些更改。

我该如何解决这个问题?

这是项目,只有4个文件:

$ ls
total 32
drwxrwxrwx   6 Bryan  staff   204 May 23 15:57 .
drwxr-xr-x  10 Bryan  staff   340 May 25 18:39 ..
-rwxrwxrwx@  1 Bryan  staff    69 Mar 22 09:40 app.yaml
-rw-r--r--   1 Bryan  staff   554 Mar 28 09:26 index.yaml
-rwxrwxrwx@  1 Bryan  staff  3015 May 25 18:36 skincare.go
-rw-r--r--   1 Bryan  staff   870 May  3 09:18 skincare_test.go

我也遇到了“go get”尝试编译代码而不是下载远程软件包“google.golang.org/appengine”的问题。

$ go get

# import "google.golang.org/appengine" is ignored and "go get" yields this error:
./skincare.go:31: undefined: appengine.Context

编辑其他信息: 我试图用-u标志强制更新:
$ go get -u

package skincarereview: directory "/Users/Bryan/go/src/skincarereview" is not using a known version control system

当我尝试运行本地服务器时,这是错误输出:

$  /Users/Bryan/go/src/google-cloud-sdk/bin/dev_appserver.py app.yaml
INFO     2017-05-30 14:27:31,722 devappserver2.py:692] Skipping SDK update check.
INFO     2017-05-30 14:27:31,785 api_server.py:272] Starting API server at: http://localhost:60703
INFO     2017-05-30 14:27:31,789 dispatcher.py:205] Starting module "default" running at: http://localhost:8080
INFO     2017-05-30 14:27:31,793 admin_server.py:116] Starting admin server at: http://localhost:8000
/Users/Bryan/go/src/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/mtime_file_watcher.py:156: UserWarning: There are too many files in your application for changes in all of them to be monitored. You may have to restart the development server to see some changes to your files.
  'There are too many files in your application for '
ERROR    2017-05-30 14:27:36,123 go_runtime.py:182] Failed to build Go application: (Executed command: /Users/Bryan/go/src/google-cloud-sdk/platform/google_appengine/goroot/bin/go-app-builder -app_base /Users/Bryan/go/src/skincarereview -arch 6 -dynamic -goroot /Users/Bryan/go/src/google-cloud-sdk/platform/google_appengine/goroot -gopath /Users/Bryan/go -nobuild_files ^^$ -incremental_rebuild -unsafe -binary_name _go_app -extra_imports appengine_internal/init -work_dir /var/folders/mw/0y88j8_54bjc93d_lg3120qw0000gp/T/tmpEOVMVuappengine-go-bin -gcflags -I,/Users/Bryan/go/src/google-cloud-sdk/platform/google_appengine/goroot/pkg/darwin_amd64_appengine -ldflags -L,/Users/Bryan/go/src/google-cloud-sdk/platform/google_appengine/goroot/pkg/darwin_amd64_appengine skincare.go skincare_test.go)
/var/folders/mw/0y88j8_54bjc93d_lg3120qw0000gp/T/tmpEOVMVuappengine-go-bin/skincare.go:31: undefined: "google.golang.org/appengine".Context

2017/05/30 10:27:36 go-app-builder: build timing: 0×skip (5ms total), 11×compile (2.128s total), 0×link (0 total)
2017/05/30 10:27:36 go-app-builder: failed running compile: exit status 2

4 个答案:

答案 0 :(得分:3)

我只使用了较旧版本的appengine sdk,但我相信下面的内容仍然是正确的。

主要问题是你的GOPATH中有google-cloud-sdk。这不应该是必要的。我把它安装在我的路径上。但即使没有安装它也应该解析它相对于你正在运行的可执行文件或脚本的位置,并且应该正确地找到所有必需的sdk文件。同时SDK大约有7500个文件,你只需要在你的GOPATH中有超过10000个(大约)来获得“到多个文件”的警告。因此,如果您在同一GOPATH中有另一个(例如较旧的)SDK或其他大项目的副本,则几乎可以保证超过阈值。只需找到/ Users / Bryan /进入Finder并使用“获取信息”来计算文件。

所以,要么在你的GOPATH之外移动appengine SDK。或者创建一个新文件夹,将其导出为新的GOPATH并将项目文件(但不是SDK)移动到该新文件夹。这应该解决“太多文件问题”。

另一个问题是您的应用实际上无法构建。正如你已经发现自己((直接)问题是缺少appengine包。

但获取google.golang.org/appengine的正确方法如下: go get google.golang.org/appengine

但请记住,在运行上述命令之前,必须正确设置GOPATH 。它将获取google.golang.org/appengine及其所有依赖项。

一旦检索到所有必需的包(以及修复的错误,如果有的话),它应该编译并运行没有问题。

答案 1 :(得分:3)

使用我当前的sdk版本(Google Cloud SDK 171.0.0dev_appserver.py有一个名为enable_watching_go_path的选项。

将其设置为False已删除警告。

我使用的命令是: dev_appserver.py --enable_watching_go_path=False server/app.yml

答案 2 :(得分:1)

当mtime_file_watcher.py尝试监视“GOPATH”下的所有文件但文件太多时会发生相应的错误,因此请使用app.yaml的skip_files选项检查vendor,node_modules和任意数量的文件可以通过排除来避免许多项目需要监控。

https://cloud.google.com/appengine/docs/standard/python/config/appref#skip_files

skip_files:
- .*node_modules
- .*vendor
- .*project-name-having-too-many-files

答案 3 :(得分:0)

我只使用App Engine SDK for Go(1.9.54),而不是Cloud SDK,但却遇到了同样的问题[Goapp serve - Warning: There are too many files

我通过将大型软件包和存储库移动到vendor/目录来解决它。