рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдирдХрд╛рд░реА: 6.1.0
рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЬрд╛рдирдХрд╛рд░реА: OSX
рд╕реАрдбреА рдбреАрдЖрдИрдЖрд░
рдлрд╛рдпрд░рдмреЗрд╕ init (рдХреЗрд╡рд▓ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ)
рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рдлрд╛рдпрд░рдмреЗрд╕ рд╕рд░реНрд╡ - рдХреЗрд╡рд▓ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ --debug
рдпрд╣ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рд╕рд╛рдЗрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИред
[2018-11-15рдЯреА17:12:15.331рдЬреЗрдб] <<< рдПрдЪрдЯреАрдЯреАрдкреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ 400 рднрд┐рдиреНрди = рдПрдХреНрд╕-рдЙрддреНрдкрддреНрддрд┐, рд╕рдВрджрд░реНрднрдХрд░реНрддрд╛, рдЙрддреНрдкрддреНрддрд┐, рд╕реНрд╡реАрдХреГрддрд┐-рдПрдиреНрдХреЛрдбрд┐рдВрдЧ, рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ = рдЖрд╡реЗрджрди/рдЬреЗрд╕рди; рд╡рд░реНрдгрд╕реЗрдЯ = рдпреВрдЯреАрдПрдл -8, рджрд┐рдирд╛рдВрдХ = рдЧреБрд░реБ, 15 рдирд╡рдВрдмрд░ 2018 17:12:15 рдЬреАрдПрдордЯреА, рд╕рд░реНрд╡рд░ = рдИрдПрд╕рдПрдл, рдХреИрд╢-рдХрдВрдЯреНрд░реЛрд▓ = рдирд┐рдЬреА, x-xss-рд╕реБрд░рдХреНрд╖рд╛ = 1; рдореЛрдб = рдмреНрд▓реЙрдХ, x-рдлреНрд░реЗрдо-рд╡рд┐рдХрд▓реНрдк = SAMEORIGIN, x-рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░-рд╡рд┐рдХрд▓реНрдк = nosniff, alt-svc=quic=":443"; рдорд╛ = 2592000; v="44,43,39,35", рдПрдХреНрд╕реЗрдкреНрдЯ-рд░реЗрдВрдЬ=рдХреЛрдИ рдирд╣реАрдВ, рдХрдиреЗрдХреНрд╢рди=рдХрд░реАрдм
[2018-11-15T17:12:15.331Z] <<< HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмреЙрдбреА рдХреЛрдб = 400, рд╕рдВрджреЗрд╢ = рдЕрдиреБрд░реЛрдз рдореЗрдВ рдПрдХ рдЕрдорд╛рдиреНрдп рддрд░реНрдХ рд╣реИред рд╕реНрдерд┐рддрд┐ = INVALID_ARGUMENT
рддреНрд░реБрдЯрд┐: HTTP рддреНрд░реБрдЯрд┐: 400, рдЕрдиреБрд░реЛрдз рдореЗрдВ рдПрдХ рдЕрдорд╛рдиреНрдп рддрд░реНрдХ рд╣реИред
[2018-11-15T17:12:15.532Z] рддреНрд░реБрдЯрд┐ рдкреНрд░рд╕рдВрдЧ: {
"рддрди": {
"рддреНрд░реБрдЯрд┐": {
"рдХреЛрдб": 400,
"message": "рдЕрдиреБрд░реЛрдз рдореЗрдВ рдПрдХ рдЕрдорд╛рдиреНрдп рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИред",
"рд╕реНрдерд┐рддрд┐": "INVALID_ARGUMENT"
}
},
"рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛": {
"рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб": 400,
"рддрди": {
"рддреНрд░реБрдЯрд┐": {
"рдХреЛрдб": 400,
"message": "рдЕрдиреБрд░реЛрдз рдореЗрдВ рдПрдХ рдЕрдорд╛рдиреНрдп рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИред",
"рд╕реНрдерд┐рддрд┐": "INVALID_ARGUMENT"
}
},
"рд╣реЗрдбрд░": {
"рднрд┐рдиреНрди": "рдПрдХреНрд╕-рдУрд░рд┐рдЬрд┐рди, рд░реЗрдлрд░рд░, рдУрд░рд┐рдЬрд┐рди, рдПрдХреНрд╕реЗрдкреНрдЯ-рдПрдиреНрдХреЛрдбрд┐рдВрдЧ",
"рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░": "рдПрдкреНрд▓рд┐рдХреЗрд╢рди/рдЬреЗрд╕рди; рд╡рд░реНрдгрд╕реЗрдЯ = рдпреВрдЯреАрдПрдл -8",
"рддрд╛рд░реАрдЦ": "рдЧреБрд░реБ, 15 рдирд╡рдВрдмрд░ 2018 17:12:15 рдЬреАрдПрдордЯреА",
"рд╕рд░реНрд╡рд░": "рдИрдПрд╕рдПрдл",
"рдХреИрд╢-рдХрдВрдЯреНрд░реЛрд▓": "рдирд┐рдЬреА",
"x-xss-рд╕реБрд░рдХреНрд╖рд╛": "1; рдореЛрдб = рдмреНрд▓реЙрдХ",
"x-рдлреНрд░реЗрдо-рд╡рд┐рдХрд▓реНрдк": "SAMEORIGIN",
"x-рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░-рд╡рд┐рдХрд▓реНрдк": "nosniff",
"alt-svc": "quic=\":443\"; ma=2592000; v=\"44,43,39,35\"",
"рд╕реНрд╡реАрдХрд╛рд░-рд╕реАрдорд╛": "рдХреЛрдИ рдирд╣реАрдВ",
"рдХрдиреЗрдХреНрд╢рди": "рдХрд░реАрдм"
},
"рдкреНрд░рд╛рд░реНрдердирд╛": {
"рдЙрд░реА": {
"рдкреНрд░реЛрдЯреЛрдХреЙрд▓": "https:",
"рд╕реНрд▓реИрд╢": рд╕рдЪ,
"рдкреНрд░рдорд╛рдг": рд╢реВрдиреНрдп,
"рд╣реЛрд╕реНрдЯ": "mobilesdk-pa.googleapis.com",
"рдкреЛрд░реНрдЯ": 443,
"рд╣реЛрд╕реНрдЯрдирд╛рдо": "mobilesdk-pa.googleapis.com",
"рд╣реИрд╢": рд╢реВрдиреНрдп,
"рдЦреЛрдЬ": рд╢реВрдиреНрдп,
"рдХреНрд╡реЗрд░реА": рд╢реВрдиреНрдп,
"рдкрдердирд╛рдо": "/ v1/рдкреНрд░реЛрдЬреЗрдХреНрдЯ/540833485883/рдХреНрд▓рд╛рдЗрдВрдЯ/_: getWebAppConfig",
"рдкрде": "/ v1/рдкреНрд░реЛрдЬреЗрдХреНрдЯ/540833485883/рдХреНрд▓рд╛рдЗрдВрдЯ/_: getWebAppConfig",
"href": " https://mobilesdk-pa.googleapis.com/v1/projects/540833485883/clients/_ :getWebAppConfig"
},
"рд╡рд┐рдзрд┐": "рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ"
}
}
}
рдореЗрд░рд╛ рднреА рдпрд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИ:
рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА: 6.1.0 (6.0.0, 5.0.0 рдХреЗ рд╕рд╛рде рднреА рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)
рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЬрд╛рдирдХрд╛рд░реА: OSX 10.14 macOS Mojave 18A391
$ firebase serve --only hosting,functions --debug
рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдПрдХ рдирдП рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╡рд╣реА рддреНрд░реБрдЯрд┐ред
Error: HTTP Error: 400, Request contains an invalid argument.
[2018-11-15T17:40:46.943Z] Error Context: {
"body": {
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT"
}
},
"response": {
"statusCode": 400,
"body": {
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT"
}
},
"headers": {
"vary": "X-Origin, Referer, Origin,Accept-Encoding",
"content-type": "application/json; charset=UTF-8",
"date": "Thu, 15 Nov 2018 17:40:46 GMT",
"server": "ESF",
"cache-control": "private",
"x-xss-protection": "1; mode=block",
"x-frame-options": "SAMEORIGIN",
"x-content-type-options": "nosniff",
"alt-svc": "quic=\":443\"; ma=2592000; v=\"44,43,39,35\"",
"accept-ranges": "none",
"connection": "close"
},
"request": {
"uri": {
"protocol": "https:",
"slashes": true,
"auth": null,
"host": "mobilesdk-pa.googleapis.com",
"port": 443,
"hostname": "mobilesdk-pa.googleapis.com",
"hash": null,
"search": null,
"query": null,
"pathname": "/v1/projects/128559963708/clients/_:getWebAppConfig",
"path": "/v1/projects/128559963708/clients/_:getWebAppConfig",
"href": "https://mobilesdk-pa.googleapis.com/v1/projects/128559963708/clients/_:getWebAppConfig"
},
"method": "GET"
}
}
}
рдореБрдЭреЗ рдареАрдХ рд╡реИрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдореИрдВрдиреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдорд╢реАрди рдкрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рдЙрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛ рд▓рдЧрднрдЧ 3 рдорд╣реАрдиреЗ рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╡рд╣реА рд╣реИред рдЕрдкрдиреЗ рд╕рд╛рдорд╛рдиреНрдп, рд▓реЗрдХрд┐рди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ (_firebase рд╕рд░реНрд╡ - рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди, рд╣реЛрд╕реНрдЯрд┐рдВрдЧ --debug_) рдмрд╕ рдЗрд╕ рдПрдиреЛрдЗрдВрдЧ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдВ ...
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдРрдк (рдореЗрд░реА рдпрд╛ рдЖрдкрдХреА) рд╣реИред
рд▓рдЧрднрдЧ 2 рдШрдВрдЯреЗ рдкрд╣рд▓реЗ рд╕рдм рдХреБрдЫ рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рдерд╛!
рдореЗрд░реЗ рд▓рд┐рдП +1
рд╡рд╣реА рдореБрджреНрджрд╛ред рдХрд▓ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛
[2018-11-15T17:22:20.885Z] >>> HTTP REQUEST GET https://mobilesdk-pa.googleapis.com/v1/projects/xxx/clients/_:getWebAppConfig
[2018-11-15T17:22:21.179Z] <<< HTTP RESPONSE BODY code=400, message=Request contains an invalid argument., status=INVALID_ARGUMENT
+1 рдореЗрд░реЗ рд▓рд┐рдП, рдФрд░ рдПрдХ рдорд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рднреА, рдЖрдЬ рд╕реБрдмрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрдм рдпрд╣ рдХрд▓ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореБрдЭреЗ https://status.firebase.google.com рдкрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдХреНрдпрд╛ рдлрд╛рдпрд░рдмреЗрд╕ рд╕реЗ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдореЗрд░реЗ рд▓рд┐рдП +1 - рдЕрдЪрд╛рдирдХ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред 6.0.1 рд╕реЗ 6.1.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рдЕрдм firebase serve
рднреА рдореБрдЭреЗ рдпрд╣ рд╕рдВрджреЗрд╢ рджреЗрддрд╛ рд╣реИ:
functions: Preparing to emulate functions.
тЪа Setup required, please run: firebase setup:emulators:firestore
рдореИрдВ рдЙрд╕ рдЖрджреЗрд╢ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЬрдм рдореИрдВ firebase serve
рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ:
i functions: Preparing to emulate functions.
тЬФ firestore: started on http://localhost:8080
тЪа firestore: Error: Invalid or corrupt jarfile /home/alex/.cache/firebase/emulators/cloud-firestore-emulator-v1.2.1.jar
рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрднреА-рдЕрднреА рдЪрд▓рд╛рдП рдЧрдП рдЖрджреЗрд╢ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдпрд╣ рдкреГрд╖реНрда рдорд┐рд▓рд╛: https://firebase.google.com/docs/firestore/security/test-rules-emulator
рдореИрдВрдиреЗ firebase --open-sesame emulators
рдпрд╣ рд╕реЛрдЪрдХрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдпрд╣ 6.1.0 рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА рдФрд░ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА:
Error: Did not recognize preview feature
+1 рд╡рд╣реА рдореБрджреНрджрд╛, рдЖрдЬ рд╕реБрдмрд╣ рд╢реБрд░реВ рд╣реБрдЖ
+1ред рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ firebase-tools
рд╕рдВрд╕реНрдХрд░рдгреЛрдВ v6.0.1 рдФрд░ v6.1.0 рдХреЗ рд╕рд╛рде firebase serve
рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, firebase serve
рдХрдорд╛рдВрдб рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдареАрдХ рд╕реЗ рдмрдВрдж рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд┐рдВрдЧ рдкреЛрд░реНрдЯреНрд╕ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИ, рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдореИрдиреНрдпреБрдЕрд▓ рд╣рддреНрдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдмрд╕ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдореБрдЭреЗ рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдлрд╛рдпрд░рдмреЗрд╕ рд╕рд░реНрд╡ рдХрд▓ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рджреЛрдиреЛрдВ рдлрд╛рдпрд░рдмреЗрд╕ 6.0.1 рдФрд░ 6.1.0 . рдкрд░ рд╣реИ
рдореЗрд░рд╛ рдареАрдХ рдпрд╣реА рдореБрджреНрджрд╛ рд╣реИред
рд╡реИрд╕рд╛ рд╣реА!
рд╡рд╣реАред рдореИрдВ рдЕрднреА рддреИрдирд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
рдореИрдВ рднреА:
рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдзреНрдпрд╛рди рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред рд╣рдо рдЕрднреА рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╕рдХреНрд░рд┐рдпрддрд╛ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
(рдЖрдВрддрд░рд┐рдХ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдВрдЦреНрдпрд╛: 119615185)
@Neilpoulin рдЖрдк рддреИрдирд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ? рдЖрдк рд╕реАрдПрд▓рдЖрдИ рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдХреМрди рд╕реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ?
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ- рдпрд╣ рд╕реАрдзреЗ рдлрд╛рдпрд░ рдмреЗрд╕ рдбрд┐рдкреНрд▓реЙрдп рдХрдорд╛рдВрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рдирд┐рд░реНрдорд╛рдг
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдЪрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкрдХрдбрд╝ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ I
рддреИрдирд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдЧреБрд░реБ, рдирд╡рдВрдмрд░ 15, 2018 рдЕрдкрд░рд╛рд╣реНрди 12:10 рдмрдЬреЗ рдорд╛рдЗрдХрд▓ рдмреНрд▓реЗрдШ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com . рдкрд░
рд▓рд┐рдЦрд╛ рдерд╛:
@Neilpoulin https://github.com/Neilpoulin рдЖрдк рддреИрдирд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ? рдХреНрдпрд╛
рд╕реАрдПрд▓рдЖрдИ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ?-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛редрдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/firebase/firebase-tools/issues/1015#issuecomment-439155616 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAw-atNnP6wSmeHQke6z4EKIsx1D6r7Yks5uvbw_gaJpZM4Ygu-y
.
рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ рддреЛ рдЖрдк рдЗрд╕ рджреМрд░рд╛рди рдмрдВрджрд░рдЧрд╛рд╣ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рддреИрдирд╛рддреА рдпрд╛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг:
рд╕реБрдбреЛ рдлрд╛рдпрд░рдмреЗрд╕ рд╕рд░реНрд╡ - рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп --рдкреЛрд░реНрдЯ = 9000
рд╡рд╣реА рдореБрджреНрджрд╛ ... рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдХрд╛рд░рдг рд╣рдорд╛рд░рд╛ рд╡рд┐рдХрд╛рд╕ рд░реБрдХ рдЧрдпрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╛рдордЧреНрд░реА рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╛рдпрд░рдмреЗрд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдгреАрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╛рдпрд░рдмреЗрд╕ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рд╕реНрдЯреЗрдЯрд╕ рдбреИрд╢рдмреЛрд░реНрдб рд╕рднреА рд╣рд░реЗ рд░рдВрдЧ рдХрд╛ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред рдХрд▓ рддрдХ рд╕рдм рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рдерд╛ред
рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде...
тЪа database: WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by io.netty.util.internal.ReflectionUtil (file:/Users/rodrigodutra/.cache/firebase/emulators/firebase-database-emulator-v3.5.0.jar) to field sun.nio.ch.SelectorImpl.selectedKeys
WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.ReflectionUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
тЪа database:
...
рдореБрдЭреЗ рдЕрдм рдЕрд╡реИрдз рддрд░реНрдХ 400 рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдФрд░ рдЕрднреА рднреА рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ:
2018-11-15T20:01:14.098Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer, Origin,Accept-Encoding, date=Thu, 15 Nov 2018 20:01:22 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="44,43,39,35", accept-ranges=none, connection=close
[2018-11-15T20:01:14.098Z] Starting @google-cloud/functions-emulator
[2018-11-15T20:01:14.115Z] Parsing function triggers
Warning: You're using Node.js v10.13.0 but Google Cloud Functions only supports v6.11.5.
[2018-11-15T20:01:14.238Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer, Origin,Accept-Encoding, date=Thu, 15 Nov 2018 20:01:22 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="44,43,39,35", accept-ranges=none, connection=close
i hosting: Serving hosting files from: public
тЬФ hosting: Local server: http://localhost:5000
тЪа database: WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by io.netty.util.internal.ReflectionUtil (file:/home/qkay/.cache/firebase/emulators/firebase-database-emulator-v3.5.0.jar) to field sun.nio.ch.SelectorImpl.selectedKeys
WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.ReflectionUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
тЪа database:
error: SUPERVISOR error Error: listen EADDRINUSE 127.0.0.1:5001
at Server.setupListenHandle [as _listen2] (net.js:1286:14)
at listenInCluster (net.js:1334:12)
at GetAddrInfoReqWrap.doListen [as callback] (net.js:1460:7)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:62:10)
error: supervisorPort (5001) is already in use
error: restPort (5002) is already in use
12:01:15.254 [NamespaceSystem-akka.actor.default-dispatcher-3] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started
12:01:15.408 [main] INFO com.firebase.server.forge.App$ - Listening on port 9000
12:01:15.438 [main] ERROR com.firebase.server.forge.App$ - Error initializing Netty Listener
java.net.BindException: Address already in use
at java.base/sun.nio.ch.Net.bind0(Native Method)
at java.base/sun.nio.ch.Net.bind(Net.java:461)
at java.base/sun.nio.ch.Net.bind(Net.java:453)
at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:128)
at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:500)
at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1226)
at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:495)
at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:480)
at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:973)
at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:209)
at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:355)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:399)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:464)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:131)
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
at java.base/java.lang.Thread.run(Thread.java:834)
12:01:15.440 [Thread-1] INFO com.firebase.server.forge.App$ - Attempting graceful shutdown.
12:01:15.444 [NamespaceSystem-akka.actor.default-dispatcher-4] INFO akka.actor.CoordinatedShutdown - Starting coordinated shutdown from JVM shutdown hook
12:01:15.448 [Thread-1] INFO com.firebase.server.forge.App$ - Graceful shutdown complete.
Error: database: emulator has exited with code: 1
рдореБрдЭреЗ рдЕрдм рдЕрд╡реИрдз рддрд░реНрдХ 400 рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдФрд░ рдЕрднреА рднреА рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ:
2018-11-15T20:01:14.098Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer, Origin,Accept-Encoding, date=Thu, 15 Nov 2018 20:01:22 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="44,43,39,35", accept-ranges=none, connection=close [2018-11-15T20:01:14.098Z] Starting @google-cloud/functions-emulator [2018-11-15T20:01:14.115Z] Parsing function triggers Warning: You're using Node.js v10.13.0 but Google Cloud Functions only supports v6.11.5. [2018-11-15T20:01:14.238Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer, Origin,Accept-Encoding, date=Thu, 15 Nov 2018 20:01:22 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="44,43,39,35", accept-ranges=none, connection=close i hosting: Serving hosting files from: public тЬФ hosting: Local server: http://localhost:5000 тЪа database: WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by io.netty.util.internal.ReflectionUtil (file:/home/qkay/.cache/firebase/emulators/firebase-database-emulator-v3.5.0.jar) to field sun.nio.ch.SelectorImpl.selectedKeys WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.ReflectionUtil WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release тЪа database: error: SUPERVISOR error Error: listen EADDRINUSE 127.0.0.1:5001 at Server.setupListenHandle [as _listen2] (net.js:1286:14) at listenInCluster (net.js:1334:12) at GetAddrInfoReqWrap.doListen [as callback] (net.js:1460:7) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:62:10) error: supervisorPort (5001) is already in use error: restPort (5002) is already in use 12:01:15.254 [NamespaceSystem-akka.actor.default-dispatcher-3] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started 12:01:15.408 [main] INFO com.firebase.server.forge.App$ - Listening on port 9000 12:01:15.438 [main] ERROR com.firebase.server.forge.App$ - Error initializing Netty Listener java.net.BindException: Address already in use at java.base/sun.nio.ch.Net.bind0(Native Method) at java.base/sun.nio.ch.Net.bind(Net.java:461) at java.base/sun.nio.ch.Net.bind(Net.java:453) at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227) at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:128) at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:500) at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1226) at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:495) at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:480) at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:973) at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:209) at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:355) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:399) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:464) at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:131) at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138) at java.base/java.lang.Thread.run(Thread.java:834) 12:01:15.440 [Thread-1] INFO com.firebase.server.forge.App$ - Attempting graceful shutdown. 12:01:15.444 [NamespaceSystem-akka.actor.default-dispatcher-4] INFO akka.actor.CoordinatedShutdown - Starting coordinated shutdown from JVM shutdown hook 12:01:15.448 [Thread-1] INFO com.firebase.server.forge.App$ - Graceful shutdown complete. Error: database: emulator has exited with code: 1
рдЕрдкрдиреЗ рдореИрдХ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░реЗрдВ ...
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдЬрд╛рдд рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП firebase serve --only hosting
рдпрд╛ firebase serve --only functions
рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рдХреНрд╕ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред
рдореБрдЭреЗ рднреА рд╕рдорд╕реНрдпрд╛ рдереА; рдЕрднреА-рдЕрднреА рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@Neilpoulin рдЖрдк рддреИрдирд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ? рдЖрдк рд╕реАрдПрд▓рдЖрдИ рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдХреМрди рд╕реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ?
@mbleeigh рдЕрдм рдЖрдкрдХреЛ рдФрд░ рд╡рд┐рд╡рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реВрдВ:
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдиреЛрдб рдореЗрдВ firebase-tools
рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВред рдЬреЛ рдЖрджреЗрд╢ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ:
рдЬрдм рдореБрдЭреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рддреЛ firbase-tools
рд╕рдВрд╕реНрдХрд░рдг 6.0.1
ред рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕реЗ 6.1.0
рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рд╡рд╣реА рдереАред
const fbcli = require("firebase-tools");
const opts = {"project": "stage"}; //this is an active alias for my firebase setup
return fbcli.setup
.web(opts)
.then(firebaseConfig => {
// some config setup stuff for webpack
}.catch(error => {
//This gets called rigt away, see error object below
console.error(error);
})
рдЬрд╣рд╛рдВ рдкрдХрдбрд╝реА рдЧрдИ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрддреА рд╣реИ:
{
"name": "FirebaseError",
"message": "HTTP Error: 400, Request contains an invalid argument.",
"children": [],
"status": 500,
"exit": 1,
"stack": "Error\n at new FirebaseError (/Users/myrepo/node_modules/firebase-tools/src/error.js:11:16)\n at module.exports (/Users/myrepo/node_modules/firebase-tools/src/responseToError.js:46:10)\n at Request._callback (/Users/myrepo/node_modules/firebase-tools/src/api.js:50:25)\n at Request.self.callback (/Users/myrepo/node_modules/request/request.js:185:22)\n at emitTwo (events.js:126:13)\n at Request.emit (events.js:214:7)\n at Request.<anonymous> (/Users/myrepo/node_modules/request/request.js:1161:10)\n at emitOne (events.js:116:13)\n at Request.emit (events.js:211:7)\n at IncomingMessage.<anonymous> (/Users/myrepo/node_modules/request/request.js:1083:12)",
"context": {
"body": {
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT"
}
},
"response": {
"statusCode": 400,
"body": {
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT"
}
},
"headers": {
"vary": "X-Origin, Referer, Origin,Accept-Encoding",
"content-type": "application/json; charset=UTF-8",
"date": "Thu, 15 Nov 2018 18:33:41 GMT",
"server": "ESF",
"cache-control": "private",
"x-xss-protection": "1; mode=block",
"x-frame-options": "SAMEORIGIN",
"x-content-type-options": "nosniff",
"alt-svc": "quic=\":443\"; ma=2592000; v=\"44,43,39,35\"",
"accept-ranges": "none",
"connection": "close"
},
"request": {
"uri": {
"protocol": "https:",
"slashes": true,
"auth": null,
"host": "mobilesdk-pa.googleapis.com",
"port": 443,
"hostname": "mobilesdk-pa.googleapis.com",
"hash": null,
"search": null,
"query": null,
"pathname": "/v1/projects/465836249868/clients/_:getWebAppConfig",
"path": "/v1/projects/465836249868/clients/_:getWebAppConfig",
"href": "https://mobilesdk-pa.googleapis.com/v1/projects/465836249868/clients/_:getWebAppConfig"
},
"method": "GET"
}
}
}
}
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ 1:16 рдмрдЬреЗ рдПрдордЯреА, рдореИрдВ рдЕрдм рдпрд╣ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ
рд╣рдордиреЗ рдмреИрдХрдПрдВрдб рдмрд┐рд▓реНрдб рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗ рд▓рд┐рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рдерд╛ред рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЕрднреА рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ?
рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛
+1 рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж
+1 рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреАред
+1 рд╡рд╛рдкрд╕ рд╡реНрдпрд╡рд╕рд╛рдпреЛрдВ рдореЗрдВ
@ryanpbrewster рд╣рд╛рдБ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж! рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ e2e рдкрд░реАрдХреНрд╖рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдкреАрдПрд╕: рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд░рд┐рдмреВрдЯ рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреБрдЫ рд▓рдЯрдХрддреА рд╣реБрдИ рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдорд┐рд▓реА рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ firebase serve
рд╕реЗ рдкрд╣рд▓реЗ рдорд╛рд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА, рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкрд┐рдЫрд▓реЗ рддреИрдирд╛рддреА рдкреНрд░рдпрд╛рд╕реЛрдВ рд╕реЗ рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдереАрдВред рдореИрдВ рдмрд╕ рд╢реАрд░реНрд╖ рдкрд░ рдЧрдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдорд╛рд░ рдбрд╛рд▓рд╛ рдФрд░ рдЕрдм рдлрд╛рдпрд░рдмреЗрд╕ рдЙрдкрдХрд░рдг рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред
+1 рд╕рдм рд╕реЗрдЯ! рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
рдЖрдкрдХреЗ рдзреИрд░реНрдп рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдЕрдорд╛рдиреНрдп рддрд░реНрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
5 рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, 'рдлрд╛рдпрд░рдмреЗрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди' рдкрд░ред
рд╕рдорд╛рд░реЛрд╣ рд╣реИ:
exports.makeUppercase = functions.database.ref('/userfollowers/{pushId}/followers')
.onWrite((change, context) => {
// Only edit data when it is first created.
if (change.before.exists()) {
return null;
}
// Exit when the data is deleted.
if (!change.after.exists()) {
return null;
}
// Grab the current value of what was written to the Realtime Database.
const original = change.after.val();
console.log('Uppercasing', context.params.pushId, original);
const uppercase = original.toUpperCase();
// You must return a Promise when performing asynchronous tasks inside a Functions such as
// writing to the Firebase Realtime Database.
// Setting an "uppercase" sibling in the Realtime Database returns a Promise.
return change.after.ref.parent.child('uppercase').set(uppercase);
});
рдЬреЛ рд╕реАрдзреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред
рдЯрд░реНрдорд┐рдирд▓ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
тЪа functions: failed to create function makeUppercase
HTTP Error: 400, The request has errors
рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рди рд▓реЙрдЧ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ:
{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","status":{"code":3,"message":"INVALID_ARGUMENT"},"authenticationInfo":{"principalEmail":"[email protected]"},"requestMetadata":{"callerIp":"86.120.235.246","callerSuppliedUserAgent":"FirebaseCLI/3.19.0,gzip(gfe),gzip(gfe)","requestAttributes":{"time":"2019-05-14T08:34:18.563Z","auth":{}},"destinationAttributes":{}},"serviceName":"cloudfunctions.googleapis.com","methodName":"google.cloud.functions.v1.CloudFunctionsService.CreateFunction","authorizationInfo":[{"resource":"projects/parkour-9136c/locations/us-central1/functions/makeUppercase","permission":"cloudfunctions.functions.create","granted":true,"resourceAttributes":{}},{"permission":"cloudfunctions.functions.create","granted":true,"resourceAttributes":{}}],"resourceName":"projects/parkour-9136c/locations/us-central1/functions/makeUppercase","request":{"location":"projects/parkour-9136c/locations/us-central1","@type":"type.googleapis.com/google.cloud.functions.v1.CreateFunctionRequest","function":{"labels":{"deployment-tool":"cli-firebase"},"entryPoint":"makeUppercase","eventTrigger":{"eventType":"providers/google.firebase.database/eventTypes/ref.write","resource":"projects/_/instances/parkour-9136c/refs/userfollowers/{pushId}/followers","service":"firebaseio.com"},"sourceUploadUrl":"https://storage.googleapis.com/gcf-upload-us-central1-f5adb7fe-7321-4f3c-8fe0-2b2307d26138/5b099ea8-161b-44a7-a3bd-18ce75c64859.zip?GoogleAccessId=service-807137615499@gcf-admin-robot.iam.gserviceaccount.com&Expires=1557824657&Signature=PJKzJsZtHWO1kIkmrSojpdgvb0jRzV91eNC9rZc4j%2FMcoHjILGm36FKCt6qQ2fxeAUu1%2FbrxpagdI7fHmUUUrDdTmnTNISr7FiN61sifUI%2B%2FGnUwo8SguzvrA7kADFqu8nD05FAo7BvG7biUrHmLgISlwo5dTKqcTSmExnaICA1tHYxjz%2Fk0RbmdGkcQ5HdeCKBnW0R7wQPsxswQyvR4cAU4WD2m3PPM9lncVr7pB%2Fh77FboGLi3sq%2FGHyEwUtjfUmyN9d%2FYUpKs48TMsGPknAGIvaFFUWQR23YCDUcrPipq1nW2W1JUdf5nGylYmVEeyF3jLrm%2BsOIcXiZ6LCRhpg%3D%3D","name":"projects/parkour-9136c/locations/us-central1/functions/makeUppercase"}}}
рдХреНрдпрд╛ рдирд┐рджрд╛рди рд╣реИ?
рдзрдиреНрдпрд╡рд╛рдж
@nicoara рдХреГрдкрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЕрдВрдХ рдЦреЛрд▓реЗрдВред рд╢реБрдХреНрд░рд┐рдпрд╛ред
5 рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, 'рдлрд╛рдпрд░рдмреЗрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди' рдкрд░ред
рд╕рдорд╛рд░реЛрд╣ рд╣реИ:
exports.makeUppercase = functions.database.ref('/userfollowers/{pushId}/followers') .onWrite((change, context) => { // Only edit data when it is first created. if (change.before.exists()) { return null; } // Exit when the data is deleted. if (!change.after.exists()) { return null; } // Grab the current value of what was written to the Realtime Database. const original = change.after.val(); console.log('Uppercasing', context.params.pushId, original); const uppercase = original.toUpperCase(); // You must return a Promise when performing asynchronous tasks inside a Functions such as // writing to the Firebase Realtime Database. // Setting an "uppercase" sibling in the Realtime Database returns a Promise. return change.after.ref.parent.child('uppercase').set(uppercase); });
рдЬреЛ рд╕реАрдзреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред
рдЯрд░реНрдорд┐рдирд▓ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
тЪа functions: failed to create function makeUppercase HTTP Error: 400, The request has errors
рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рди рд▓реЙрдЧ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ:
{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","status":{"code":3,"message":"INVALID_ARGUMENT"},"authenticationInfo":{"principalEmail":"[email protected]"},"requestMetadata":{"callerIp":"86.120.235.246","callerSuppliedUserAgent":"FirebaseCLI/3.19.0,gzip(gfe),gzip(gfe)","requestAttributes":{"time":"2019-05-14T08:34:18.563Z","auth":{}},"destinationAttributes":{}},"serviceName":"cloudfunctions.googleapis.com","methodName":"google.cloud.functions.v1.CloudFunctionsService.CreateFunction","authorizationInfo":[{"resource":"projects/parkour-9136c/locations/us-central1/functions/makeUppercase","permission":"cloudfunctions.functions.create","granted":true,"resourceAttributes":{}},{"permission":"cloudfunctions.functions.create","granted":true,"resourceAttributes":{}}],"resourceName":"projects/parkour-9136c/locations/us-central1/functions/makeUppercase","request":{"location":"projects/parkour-9136c/locations/us-central1","@type":"type.googleapis.com/google.cloud.functions.v1.CreateFunctionRequest","function":{"labels":{"deployment-tool":"cli-firebase"},"entryPoint":"makeUppercase","eventTrigger":{"eventType":"providers/google.firebase.database/eventTypes/ref.write","resource":"projects/_/instances/parkour-9136c/refs/userfollowers/{pushId}/followers","service":"firebaseio.com"},"sourceUploadUrl":"https://storage.googleapis.com/gcf-upload-us-central1-f5adb7fe-7321-4f3c-8fe0-2b2307d26138/5b099ea8-161b-44a7-a3bd-18ce75c64859.zip?GoogleAccessId=service-807137615499@gcf-admin-robot.iam.gserviceaccount.com&Expires=1557824657&Signature=PJKzJsZtHWO1kIkmrSojpdgvb0jRzV91eNC9rZc4j%2FMcoHjILGm36FKCt6qQ2fxeAUu1%2FbrxpagdI7fHmUUUrDdTmnTNISr7FiN61sifUI%2B%2FGnUwo8SguzvrA7kADFqu8nD05FAo7BvG7biUrHmLgISlwo5dTKqcTSmExnaICA1tHYxjz%2Fk0RbmdGkcQ5HdeCKBnW0R7wQPsxswQyvR4cAU4WD2m3PPM9lncVr7pB%2Fh77FboGLi3sq%2FGHyEwUtjfUmyN9d%2FYUpKs48TMsGPknAGIvaFFUWQR23YCDUcrPipq1nW2W1JUdf5nGylYmVEeyF3jLrm%2BsOIcXiZ6LCRhpg%3D%3D","name":"projects/parkour-9136c/locations/us-central1/functions/makeUppercase"}}}
рдХреНрдпрд╛ рдирд┐рджрд╛рди рд╣реИ?
рдзрдиреНрдпрд╡рд╛рдж
5 рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, 'рдлрд╛рдпрд░рдмреЗрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди' рдкрд░ред
рд╕рдорд╛рд░реЛрд╣ рд╣реИ:
exports.makeUppercase = functions.database.ref('/userfollowers/{pushId}/followers') .onWrite((change, context) => { // Only edit data when it is first created. if (change.before.exists()) { return null; } // Exit when the data is deleted. if (!change.after.exists()) { return null; } // Grab the current value of what was written to the Realtime Database. const original = change.after.val(); console.log('Uppercasing', context.params.pushId, original); const uppercase = original.toUpperCase(); // You must return a Promise when performing asynchronous tasks inside a Functions such as // writing to the Firebase Realtime Database. // Setting an "uppercase" sibling in the Realtime Database returns a Promise. return change.after.ref.parent.child('uppercase').set(uppercase); });
рдЬреЛ рд╕реАрдзреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред
рдЯрд░реНрдорд┐рдирд▓ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
тЪа functions: failed to create function makeUppercase HTTP Error: 400, The request has errors
рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рди рд▓реЙрдЧ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ:
{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","status":{"code":3,"message":"INVALID_ARGUMENT"},"authenticationInfo":{"principalEmail":"[email protected]"},"requestMetadata":{"callerIp":"86.120.235.246","callerSuppliedUserAgent":"FirebaseCLI/3.19.0,gzip(gfe),gzip(gfe)","requestAttributes":{"time":"2019-05-14T08:34:18.563Z","auth":{}},"destinationAttributes":{}},"serviceName":"cloudfunctions.googleapis.com","methodName":"google.cloud.functions.v1.CloudFunctionsService.CreateFunction","authorizationInfo":[{"resource":"projects/parkour-9136c/locations/us-central1/functions/makeUppercase","permission":"cloudfunctions.functions.create","granted":true,"resourceAttributes":{}},{"permission":"cloudfunctions.functions.create","granted":true,"resourceAttributes":{}}],"resourceName":"projects/parkour-9136c/locations/us-central1/functions/makeUppercase","request":{"location":"projects/parkour-9136c/locations/us-central1","@type":"type.googleapis.com/google.cloud.functions.v1.CreateFunctionRequest","function":{"labels":{"deployment-tool":"cli-firebase"},"entryPoint":"makeUppercase","eventTrigger":{"eventType":"providers/google.firebase.database/eventTypes/ref.write","resource":"projects/_/instances/parkour-9136c/refs/userfollowers/{pushId}/followers","service":"firebaseio.com"},"sourceUploadUrl":"https://storage.googleapis.com/gcf-upload-us-central1-f5adb7fe-7321-4f3c-8fe0-2b2307d26138/5b099ea8-161b-44a7-a3bd-18ce75c64859.zip?GoogleAccessId=service-807137615499@gcf-admin-robot.iam.gserviceaccount.com&Expires=1557824657&Signature=PJKzJsZtHWO1kIkmrSojpdgvb0jRzV91eNC9rZc4j%2FMcoHjILGm36FKCt6qQ2fxeAUu1%2FbrxpagdI7fHmUUUrDdTmnTNISr7FiN61sifUI%2B%2FGnUwo8SguzvrA7kADFqu8nD05FAo7BvG7biUrHmLgISlwo5dTKqcTSmExnaICA1tHYxjz%2Fk0RbmdGkcQ5HdeCKBnW0R7wQPsxswQyvR4cAU4WD2m3PPM9lncVr7pB%2Fh77FboGLi3sq%2FGHyEwUtjfUmyN9d%2FYUpKs48TMsGPknAGIvaFFUWQR23YCDUcrPipq1nW2W1JUdf5nGylYmVEeyF3jLrm%2BsOIcXiZ6LCRhpg%3D%3D","name":"projects/parkour-9136c/locations/us-central1/functions/makeUppercase"}}}
рдХреНрдпрд╛ рдирд┐рджрд╛рди рд╣реИ?
рдзрдиреНрдпрд╡рд╛рдж
рдбреАрдмреА рд░реЗрдлрд░реА рдкрде рдХреЗ рдЕрдВрдд рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП /userfollowers/{pushId}/followers/{follower}
@bkendall рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рд╕реВрддреНрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛: https://github.com/firebase/firebase-tools/issues/1317
рдореИрдВрдиреЗ 'рдлрд╝рд╛рдпрд░рдмреЗрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди --debug' рдЪрд▓рд╛рдпрд╛ рдФрд░ рдПрдХ рдирдпрд╛ рд╕рдВрджреЗрд╢ рдкрд╛рдпрд╛ред
[2019-05-20T14:43:23.863Z] <<< HTTP RESPONSE 400 vary=X-Origin, Referer, Origin,Accept-Encoding, content-type=application/json; charset=UTF-8, date=Mon, 20 May 2019 14:43:23 GMT, server=ESF, cache-control=private, x-xss-protection=0, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="46,44,43,39", accept-ranges=none, connection=close
[2019-05-20T14:43:23.863Z] <<< HTTP RESPONSE BODY code=400, message=The request has errors, status=INVALID_ARGUMENT, details=[@type=type.googleapis.com/google.rpc.BadRequest, fieldViolations=[field=runtime, description=Runtime field cannot be empty.]]
тЪа functions: failed to create function makeUppercase
HTTP Error: 400, The request has errors
@soclbz рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред
рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж
рд╕рдорд╛рди _"рд░рдирдЯрд╛рдЗрдо рдлрд╝реАрд▓реНрдб рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛"_ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛:
[2019-06-06рдЯреА18:51:31.127рдЬреЗрдб] <<< HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ 400 рднрд┐рдиреНрди = рдПрдХреНрд╕-рдЙрддреНрдкрддреНрддрд┐, рд╕рдВрджрд░реНрднрдХрд░реНрддрд╛, рдЙрддреНрдкрддреНрддрд┐, рд╕реНрд╡реАрдХреГрддрд┐-рдПрдиреНрдХреЛрдбрд┐рдВрдЧ, рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ = рдЖрд╡реЗрджрди/рдЬреЗрд╕рди; рд╡рд░реНрдгрд╕реЗрдЯ = UTF-8, рджрд┐рдирд╛рдВрдХ = рдЧреБрд░реБ, 06 рдЬреВрди 2019 18:51:30 GMT, рд╕рд░реНрд╡рд░ = ESF, рдХреИрд╢реЗ-рдирд┐рдпрдВрддреНрд░рдг = рдирд┐рдЬреА, x-xss-рд╕реБрд░рдХреНрд╖рд╛ = 0, x-рдлреНрд░реЗрдо-рд╡рд┐рдХрд▓реНрдк = SAMEORIGIN, x-рд╕рд╛рдордЧреНрд░реА- рдкреНрд░рдХрд╛рд░-
рд╡рд┐рдХрд▓реНрдк = nosniff, alt-svc=quic=":443"; рдорд╛ = 2592000; v="46,44,43,39", рдПрдХреНрд╕реЗрдкреНрдЯ-рд░реЗрдВрдЬ=рдХреЛрдИ рдирд╣реАрдВ, рдХрдиреЗрдХреНрд╢рди=рдХрд░реАрдм
[2019-06-06рдЯреА18:51:31.128рдЬреЗрдб] <<< HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмреЙрдбреА рдХреЛрдб = 400, рд╕рдВрджреЗрд╢ = рдЕрдиреБрд░реЛрдз рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рд╕реНрдерд┐рддрд┐ = INVALID_ARGUMENT, рд╡рд┐рд╡рд░рдг = [@type=type.googleapis.com/google.rpc.BadRequest , рдлрд╝реАрд▓реНрдб рдЙрд▓реНрд▓рдВрдШрди = [рдлрд╝реАрд▓реНрдб = рд░рдирдЯрд╛рдЗрдо, рд╡рд┐рд╡рд░рдг = рд░рдирдЯрд╛рдЗрдо рдлрд╝реАрд▓реНрдб рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред]]
рдпрд╣ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдЙрджрд╛рд╣рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп npx firebase init
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд╡ рдирд┐рд░реНрдорд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рд╣реЛрддрд╛ рд╣реИред
@stpch рдХреНрдпрд╛ рдЖрдк CLI рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╣реИрдВ? рдХреГрдкрдпрд╛ #1317 . рджреЗрдЦреЗрдВ
@stpch рдХреНрдпрд╛ рдЖрдк CLI рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╣реИрдВ? рдХреГрдкрдпрд╛ #1317 . рджреЗрдЦреЗрдВ
рдореИрдВ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
рдореЗрд░рд╛ рдмреБрд░рд╛ рд╣реИ, рд╡рд╣рд╛рдБ рдПрдХ рдкреБрд░рд╛рдиреЗ рдерд╛ firebase-tools
рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд yarn
рдХрд┐ рдкрд░ рдкреВрд░реНрд╡рддрд╛ рд▓реЗ рд▓рд┐рдпрд╛ npx
ред рдпрд╣ рдЕрдм рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдзреНрдпрд╛рди рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред рд╣рдо рдЕрднреА рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╕рдХреНрд░рд┐рдпрддрд╛ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
(рдЖрдВрддрд░рд┐рдХ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдВрдЦреНрдпрд╛: 119615185)