💭
.gcloudignoreの書き方
.gcloudignore の設定が思ったとおりに、いかなかったのでまとめます。
.gitignoreと同じらしいですが、そもそもgitで今まで全体をignoreすることはやったことなかったので
基本はコチラに書いてあるのですが、わからなかった部分も含みます
#
始まりはコメントです
基本の考え
ファイル指定
以下パターンすべてプロジェクト直下のものが対象になります。
否定する場合は !
をつけます。
!a.txt
というファイルをデプロイ対象にしたい場合は \
でエスケープします
.gcloudignore
a.txt # a.txtがデプロイされない
/a.txt # a.txtというファイルがデプロイされない
!a.txt # a.txtがデプロイされる
/\!a.txt # !a.txtというファイルがデプロイされない
ちなみに、上記で書いた場合、 a.txt
はデプロイされ、 !a.txt
はデプロイされません。後勝ち。
フォルダ指定
フォルダの場合は後ろに /
をつける必要があります
以下パターンすべてプロジェクト直下のものが対象になります。
.gcloudignore
test/ # testというディレクトリがデプロイされない
!test/ # testというディレクトリがデプロイされる
/test/ # testというディレクトリがデプロイされない
!/test/ # testというディレクトリがデプロイされる
ちなみに、上記で書いた場合、 test
の中身はデプロイされます。これも後勝ち。
自分がつまずいたこと
*
がちょっと厄介でした。全部ignoreして、その後に対象のものだけ !
で対象ファイルやディレクトリを上書きしようとします。
.gcloudignore
*
!a.txt
!test/
とやった場合は a.txt
だけがdeployされ、 test
の中身はdeployされません(上書きができません)
代わりに、
.gcloudignore
*
!test/**
とやった場合は、 test
ディレクトリの内容がuploadされます。
つまり、ディレクトリのignoreが若干勝手が違うということです。ファイルを指定すると考えてください。
まとめ
これで自分の意志通り、不要なものをdeployしなくても済むようになりますね。
最後に僕がGAE上でNuxt.jsのSPAをやる際にまとめた設定を載せておきます。package.jsonでのhttp-serverは適宜自分の利用したいものに変えてください
.gcloudignore
*
!/dist/**
!package.json
!package-lock.json
package.json
{
"scripts": {
"start": "http-server ./dist",
},
}
app.yaml
runtime: nodejs12
instance_class: F1
handlers:
- url: /_nuxt
static_dir: dist/_nuxt
secure: always
- url: /(.*\.(gif|png|jpg|ico|txt))$
static_files: static/\1
upload: static/.*\.(gif|png|jpg|ico|txt)$
secure: always
- url: /.*
script: auto
secure: always
env_variables:
HOST: "0.0.0.0"
NODE_ENV: "production"
Discussion
このやり方で全てのファイルを
*
無視した後で、deployしたいファイル!index.js, !package.json
だけ指定したのですがデプロイ先が空でエラーになります。試しに上記のファイルを別のフォルダに移動させてデプロイしたら上手く行ったので.gcloudignore
の書き方に問題がある気がします。しかし、gcloud meta list-files-for-upload
で確認すると評価結果はアップロードしたいファイルになっています。 何か考えられる原因はないでしょうか?全く気づかずすいません、これですが、パターンとしてはあり得るのってもはやgcloud commandのエラーということしか考えにくいんですよねぇ。。。
一応確認ではありますが、以下のような.cloudignoreであっていますでしょうか?
cloud functionsなどの場合は current dir も入れないといけない時があるらしいですね
おお、なるほど、そういう場合があるんですね!
ありがとうございます