firebase / firebase-tools

The Firebase Command Line Tools
MIT License
4.01k stars 929 forks source link

HTTP 400: Unable to upload XML files in the public folder #1117

Closed rahulchowdhury closed 5 years ago

rahulchowdhury commented 5 years ago

Environment info

firebase-tools: 6.3.0 Platform: macOS

Test case

I'm trying to deploy my Jekyll generated static site to my Firebase Hosting project. While all HTML, CSS and image files upload fine, the CLI fails while uploading any XML files.

I've got a feed.xml file generated by Jekyll in my public folder. I tried creating a very minimal sample XML file to test if my feed.xml was a problem. The new XML file broke the deployment as well.

Steps to reproduce

Expected behavior

All files should get uploaded and the website deployed.

Actual behavior

The deployment process fails with the following error:

[2019-01-22T07:43:54.505Z] [hosting] hash cache [X3NpdGU] load error: lines is not defined
[2019-01-22T07:43:54.550Z] [hosting] hash cache [X3NpdGU] stored for 65 files
[2019-01-22T07:43:54.551Z] [hosting][hash queue][FINAL] max=33, min=14, avg=22.323076923076922, active=0, complete=65, success=65, errored=0, retried=0, total=65, elapsed=45
[2019-01-22T07:43:54.551Z] >>> HTTP REQUEST POST https://firebasehosting.googleapis.com/v1beta1/sites/my-website/versions/468e526b5fbdb8ec:populateFiles
 <request body omitted>
[2019-01-22T07:43:56.336Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer, Origin,Accept-Encoding, date=Tue, 22 Jan 2019 07:44:09 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, transfer-encoding=chunked
[2019-01-22T07:43:56.339Z] [hosting][populate queue][FINAL] max=1790, min=1790, avg=1790, active=0, complete=1, success=1, errored=0, retried=0, total=1, elapsed=1790
[2019-01-22T07:43:56.340Z] [hosting] uploads queued: 1
i  hosting: uploading new files [0/1] (0%)
i  hosting: uploading new files [0/1] (0%)
[2019-01-22T07:43:58.792Z] [hosting][upload] feed.xml (9d5f902dfc336abc44b6abdfc3ddbcee4a265cc63cf6c6d67a5897549c5ef004) HTTP ERROR 400 : { 'x-guploader-uploadid':
   'AEnB2Up0b-5iFfKrO6lkPCzoxQaZZ6tOF5vUK30VrDVkz9qWYzasLAQ5V_HQ2Mg8xyrhc9rFEFLcLsmvLamBdllGQqKNzu688MvlFkcXpVFuRA6Zz8RENG0',
  'content-length': '37',
  date: 'Tue, 22 Jan 2019 07:44:11 GMT',
  server: 'UploadServer',
  'content-type': 'text/html; charset=UTF-8',
  'alt-svc': 'quic=":443"; ma=2592000; v="44,43,39,35"',
  connection: 'close' } Couldn't process request (status=400)
[2019-01-22T07:43:59.198Z] [uploadQueue] Retrying task 9d5f902dfc336abc44b6abdfc3ddbcee4a265cc63cf6c6d67a5897549c5ef004
i  hosting: uploading new files [0/1] (0%)
[2019-01-22T07:44:01.515Z] [hosting][upload] feed.xml (9d5f902dfc336abc44b6abdfc3ddbcee4a265cc63cf6c6d67a5897549c5ef004) HTTP ERROR 400 : { 'x-guploader-uploadid':
   'AEnB2UpVnGh3eAHvHIphRMXt8f9FecPcvvBr3VRPu0BkB4LBxI-4vX4xarWCqiV-llDELBfW9PnNe9L7PZ8GXSKTwQxf4HoQ2A',
  'content-length': '37',
  date: 'Tue, 22 Jan 2019 07:44:14 GMT',
  server: 'UploadServer',
  'content-type': 'text/html; charset=UTF-8',
  'alt-svc': 'quic=":443"; ma=2592000; v="44,43,39,35"',
  connection: 'close' } Couldn't process request (status=400)
[2019-01-22T07:44:02.315Z] [uploadQueue] Retrying task 9d5f902dfc336abc44b6abdfc3ddbcee4a265cc63cf6c6d67a5897549c5ef004
i  hosting: uploading new files [0/1] (0%)
i  hosting: uploading new files [0/1] (0%)
[2019-01-22T07:44:05.448Z] [hosting][upload] feed.xml (9d5f902dfc336abc44b6abdfc3ddbcee4a265cc63cf6c6d67a5897549c5ef004) HTTP ERROR 400 : { 'x-guploader-uploadid':
   'AEnB2Uq4oaE7rIQAmXEf_ak1l1gyaKmwB7zAtdB_Y-G-Dk-B8kxP9UiWu3dRyWFvRE2QB5CtKdfMN-JDfC-cERCGcAIAc4rpCQ',
  'content-length': '37',
  date: 'Tue, 22 Jan 2019 07:44:18 GMT',
  server: 'UploadServer',
  'content-type': 'text/html; charset=UTF-8',
  'alt-svc': 'quic=":443"; ma=2592000; v="44,43,39,35"',
  connection: 'close' } Couldn't process request (status=400)
i  hosting: uploading new files [0/1] (0%)
[2019-01-22T07:44:07.050Z] [uploadQueue] Retrying task 9d5f902dfc336abc44b6abdfc3ddbcee4a265cc63cf6c6d67a5897549c5ef004
i  hosting: uploading new files [0/1] (0%)
[2019-01-22T07:44:10.238Z] [hosting][upload] feed.xml (9d5f902dfc336abc44b6abdfc3ddbcee4a265cc63cf6c6d67a5897549c5ef004) HTTP ERROR 400 : { 'x-guploader-uploadid':
   'AEnB2Ur_eFZb3oFZXl1Ru8N5e9asnKL4uQcuHP_BlqYzrrRP2XHVEUkbuvxmjsXNo0NMwVt_addzG16MHqE8kfL0_ZRriisD_6GW2-vrEQsUILTTcW-C2RU',
  'content-length': '37',
  date: 'Tue, 22 Jan 2019 07:44:23 GMT',
  server: 'UploadServer',
  'content-type': 'text/html; charset=UTF-8',
  'alt-svc': 'quic=":443"; ma=2592000; v="44,43,39,35"',
  connection: 'close' } Couldn't process request (status=400)
i  hosting: uploading new files [0/1] (0%)
i  hosting: uploading new files [0/1] (0%)
[2019-01-22T07:44:13.442Z] [uploadQueue] Retrying task 9d5f902dfc336abc44b6abdfc3ddbcee4a265cc63cf6c6d67a5897549c5ef004
i  hosting: uploading new files [0/1] (0%)
[2019-01-22T07:44:15.688Z] [hosting][upload] feed.xml (9d5f902dfc336abc44b6abdfc3ddbcee4a265cc63cf6c6d67a5897549c5ef004) HTTP ERROR 400 : { 'x-guploader-uploadid':
   'AEnB2UrGXxL8T7xc47Bczhjv9nYAQwpz4_kolQi43C2AtBOcuFbwwCvibSLPs5tYT1G6jL5pxp2DLW_FK0EnaeiHPNphLM_4-83gFOuV0_DNZp4osr2VS_Q',
  'content-length': '37',
  date: 'Tue, 22 Jan 2019 07:44:28 GMT',
  server: 'UploadServer',
  'content-type': 'text/html; charset=UTF-8',
  'alt-svc': 'quic=":443"; ma=2592000; v="44,43,39,35"',
  connection: 'close' } Couldn't process request (status=400)
i  hosting: uploading new files [0/1] (0%)
i  hosting: uploading new files [0/1] (0%)
i  hosting: uploading new files [0/1] (0%)
[2019-01-22T07:44:22.092Z] [uploadQueue] Retrying task 9d5f902dfc336abc44b6abdfc3ddbcee4a265cc63cf6c6d67a5897549c5ef004
i  hosting: uploading new files [0/1] (0%)
[2019-01-22T07:44:23.471Z] [hosting][upload] feed.xml (9d5f902dfc336abc44b6abdfc3ddbcee4a265cc63cf6c6d67a5897549c5ef004) HTTP ERROR 400 : { 'x-guploader-uploadid':
   'AEnB2UqRsRd3wzKSndlAR1A6PZZPBQizKjWUJJLewSKT5YohgTDpM5Re8wNmx2lOQrfBHitS2yQ-oHEt_xbUwc9nH03x5Ls6LiojqOkK5ifC_kd1161-mJk',
  'content-length': '37',
  date: 'Tue, 22 Jan 2019 07:44:36 GMT',
  server: 'UploadServer',
  'content-type': 'text/html; charset=UTF-8',
  'alt-svc': 'quic=":443"; ma=2592000; v="44,43,39,35"',
  connection: 'close' } Couldn't process request (status=400)
[2019-01-22T07:44:23.472Z] [uploadQueue] Retries exhausted for task 9d5f902dfc336abc44b6abdfc3ddbcee4a265cc63cf6c6d67a5897549c5ef004: Error: Unexpected error while uploading file.
    at Request._callback (/usr/local/lib/node_modules/firebase-tools/lib/deploy/hosting/uploader.js:197:39)
    at Request.self.callback (/usr/local/lib/node_modules/firebase-tools/node_modules/request/request.js:185:22)
    at Request.emit (events.js:188:13)
    at Request.EventEmitter.emit (domain.js:441:20)
    at Request.<anonymous> (/usr/local/lib/node_modules/firebase-tools/node_modules/request/request.js:1161:10)
    at Request.emit (events.js:188:13)
    at Request.EventEmitter.emit (domain.js:441:20)
    at IncomingMessage.<anonymous> (/usr/local/lib/node_modules/firebase-tools/node_modules/request/request.js:1083:12)
    at Object.onceWrapper (events.js:276:13)
    at IncomingMessage.emit (events.js:193:15)
[2019-01-22T07:44:23.473Z] [hosting][upload queue][FINAL] max=0, min=9999999999, avg=0, active=0, complete=1, success=0, errored=1, retried=5, total=1, elapsed=27136
[2019-01-22T07:44:24.669Z] Error: Unexpected error while uploading file.
    at Request._callback (/usr/local/lib/node_modules/firebase-tools/lib/deploy/hosting/uploader.js:197:39)
    at Request.self.callback (/usr/local/lib/node_modules/firebase-tools/node_modules/request/request.js:185:22)
    at Request.emit (events.js:188:13)
    at Request.EventEmitter.emit (domain.js:441:20)
    at Request.<anonymous> (/usr/local/lib/node_modules/firebase-tools/node_modules/request/request.js:1161:10)
    at Request.emit (events.js:188:13)
    at Request.EventEmitter.emit (domain.js:441:20)
    at IncomingMessage.<anonymous> (/usr/local/lib/node_modules/firebase-tools/node_modules/request/request.js:1083:12)
    at Object.onceWrapper (events.js:276:13)
    at IncomingMessage.emit (events.js:193:15)

Error: An unexpected error has occurred.
bkendall commented 5 years ago

I am unable to replicate this issue by simply creating an XML file. Can you provide more concrete reproduction steps or maybe a failing feed.xml file that you are using? It'd be great if you can start with an empty (or newly initialized) project and cause the error.

rahulchowdhury commented 5 years ago

I'll try to test this on a fresh project as you suggested, in the meanwhile, here's the feed.xml file that's failing:

<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.5">Jekyll</generator><link href="http://localhost:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://localhost:4000/" rel="alternate" type="text/html" /><updated>2019-01-22T13:26:18+05:30</updated><id>http://localhost:4000/feed.xml</id><title type="html">Rahul Chowdhury</title><subtitle>Just a regular guy trying to be awesome.</subtitle><entry><title type="html">Hunting the little bugs</title><link href="http://localhost:4000/blog/little-bugs" rel="alternate" type="text/html" title="Hunting the little bugs" /><published>2019-01-22T00:00:00+05:30</published><updated>2019-01-22T00:00:00+05:30</updated><id>http://localhost:4000/blog/little-bugs</id><content type="html" xml:base="http://localhost:4000/blog/little-bugs">&lt;p&gt;About &lt;strong&gt;3 months&lt;/strong&gt; ago, one of my friends got his first &lt;strong&gt;MacBook&lt;/strong&gt;. Since then, he hadn’t been able to use &lt;kbd&gt;⌘&lt;/kbd&gt; + &lt;kbd&gt;A&lt;/kbd&gt; to select all content anywhere within the whole system.&lt;/p&gt;

&lt;p&gt;Yesterday, he finally got it fixed. It was neither a bug in the macOS nor a major mess that he had made. It was just a tiny setting that got lost in the &lt;em&gt;sea&lt;/em&gt; of complex solutions.&lt;/p&gt;

&lt;p&gt;One of the apps in his system had some shortcut mapped to &lt;kbd&gt;⌘&lt;/kbd&gt; + &lt;kbd&gt;A&lt;/kbd&gt;. Finally, the &lt;em&gt;cause&lt;/em&gt; of the mayhem.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://media.giphy.com/media/L8AdWkDNN8tO0/giphy.gif&quot; alt=&quot;That one silly mistake&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Coincidentally, I too had a similar experience. I had been stuck on a very simple &lt;strong&gt;JavaScript&lt;/strong&gt; problem while developing my new blog platform &lt;a href=&quot;https://airtyper.com&quot; target=&quot;_blank&quot;&gt;Airtyper&lt;/a&gt;. Ultimately, after &lt;strong&gt;3 days&lt;/strong&gt; of struggle, I fixed the issue.&lt;/p&gt;

&lt;p&gt;This too was a &lt;em&gt;very simple&lt;/em&gt; fix yet hard to find. 🤦🏻‍♂️&lt;/p&gt;

&lt;p&gt;Why are these little bugs hard to find?&lt;/p&gt;

&lt;p&gt;Because we don’t think straight when we are stuck in a problem. We tend to &lt;em&gt;overlook&lt;/em&gt; the simple solutions in favour of some complex ones. This is what gets us stuck in limbo.&lt;/p&gt;

&lt;p&gt;We need to start thinking slow and hunt down our silly mistakes. Use a &lt;em&gt;microscope&lt;/em&gt; rather than a telescope to track down these notorious little bugs.&lt;/p&gt;

&lt;p&gt;Dull solutions are &lt;em&gt;sexy&lt;/em&gt; because we sometimes like to be &lt;em&gt;dumb&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Thank you for being an amazing reader. 🙌🏻&lt;/p&gt;</content><author><name></name></author><summary type="html">Sometimes, it's best to assume that we're just a bunch of dumb creatures</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://i.imgur.com/hcrGlTC.png" /></entry><entry><title type="html">What Harry Potter taught me about facing obstacles</title><link href="http://localhost:4000/blog/harry-potter-obstacles" rel="alternate" type="text/html" title="What Harry Potter taught me about facing obstacles" /><published>2019-01-21T00:00:00+05:30</published><updated>2019-01-21T00:00:00+05:30</updated><id>http://localhost:4000/blog/harry-potter-obstacles</id><content type="html" xml:base="http://localhost:4000/blog/harry-potter-obstacles">&lt;p&gt;It was a Sunday afternoon when I put down a hard copy of the book &lt;strong&gt;The Obstacle is the Way&lt;/strong&gt; by Ryan Holiday. I had finally managed to finish it after a week’s struggle.&lt;/p&gt;

&lt;p&gt;Right after I finished the book, I had a &lt;em&gt;eureka&lt;/em&gt; moment. This is exactly what the famed author J.K. Rowling has been trying to tell us through her &lt;strong&gt;Harry Potter series&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Assuming you’ve read Harry Potter, you would know what a &lt;strong&gt;Boggart&lt;/strong&gt; is and familiar with the &lt;a href=&quot;https://www.pottermore.com/explore-the-story/riddikulus&quot; target=&quot;_blank&quot;&gt;Riddikulus&lt;/a&gt; charm. For those who are not familiar with these terms, here’s a quick primer on the subjects.&lt;/p&gt;

&lt;p&gt;A boggart is a &lt;strong&gt;shape-shifter&lt;/strong&gt;. It doesn’t have an identity or a shape of its own. When you face a boggart, it takes the shape of the thing you fear the most. If you fear snakes, then good luck in facing a boggart as it’ll take the shape of the deadliest snake you can imagine when it comes face-to-face with you.&lt;/p&gt;

&lt;p&gt;The Riddikulus charm, on the other hand, is a piece of magic that turns a boggart from its terrifying form to something &lt;em&gt;ridiculous&lt;/em&gt;. In short, by casting a Riddikulus charm you can turn that deadliest snake of yours to something like an elephant on roller-skates.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/t2BzlYB.jpg&quot; alt=&quot;Harry Potter and Professor Lupin on the Patronus charm&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Now, the question is, what do all these have to do with obstacles?&lt;/p&gt;

&lt;p&gt;It’s quite simple, &lt;em&gt;actually&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Your obstacles are like a boggart. They can seem terrifying if you want to look at them that way. The moment you realise that they aren’t some mountain you can’t climb or not an unbreakable wall, they &lt;em&gt;lose&lt;/em&gt; their power and becomes a mere stone in your path that you can easily step over.&lt;/p&gt;

&lt;p&gt;We’re bombarded with obstacles every day. If you start ranting about them all the time, you’re actually holding yourself back from progress. Stop judging your obstacles as a permanent roadblock and start seeing them as a &lt;em&gt;mere detour&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Life will seem much easier and goals &lt;em&gt;attainable&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And that, my friend, is your Riddikulus charm in real life. Available to you in unlimited supply. Use it all you want.&lt;/p&gt;

&lt;p&gt;Thanks for reading this piece, you’re awesome. 👍🏻&lt;/p&gt;</content><author><name></name></author><summary type="html">It’s only a matter of perspective. Choose wisely.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://i.imgur.com/t2BzlYB.jpg" /></entry><entry><title type="html">The big fat paycheque</title><link href="http://localhost:4000/blog/prized-paycheque" rel="alternate" type="text/html" title="The big fat paycheque" /><published>2019-01-20T00:00:00+05:30</published><updated>2019-01-20T00:00:00+05:30</updated><id>http://localhost:4000/blog/prized-paycheque</id><content type="html" xml:base="http://localhost:4000/blog/prized-paycheque">&lt;p&gt;An abundance of startup founders these days are under the impression that an illusion of a big fat paycheque is enough to make anyone join their &lt;em&gt;cause&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Well, guess what? &lt;em&gt;It isn’t.&lt;/em&gt; 👎🏻&lt;/p&gt;

&lt;p&gt;Last &lt;strong&gt;Tuesday&lt;/strong&gt;, I got a similar call from the founder of a new startup here in Bangalore. I ended up saying no to their interview request after the call.&lt;/p&gt;

&lt;p&gt;I like the idea of a potentially massive payout in the future. However, I don’t buy the idea of working long hours for a stranger for less money that I’m earning right now just because there &lt;em&gt;might&lt;/em&gt; be a reward at the finish line.&lt;/p&gt;

&lt;p&gt;Unless you’re my dearest friend or family, I’ll settle for more cash and fewer shares, thank you. 💸&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://media.giphy.com/media/3osxYamKD88c6pXdfO/giphy.gif&quot; alt=&quot;Cash instead of shares&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This isn’t the first time I turned down such an offer. I’ve let go of multiple offers in the past for what might be rocketing shares in companies in exchange for cold hard cash.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The prize money is mostly an illusion because half the startup founders don’t know what they’re doing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If I’m to gamble with my life then I’ll gamble when I’m calling the shots, not someone else. 🎲&lt;/p&gt;

&lt;p&gt;What would you do in a similar situation?&lt;/p&gt;

&lt;p&gt;Once again, thank you for reading this piece. 🙌🏻&lt;/p&gt;</content><author><name></name></author><summary type="html">Steer clear of the traps of these booby traps.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://media.giphy.com/media/3osxYamKD88c6pXdfO/giphy.gif" /></entry><entry><title type="html">Limitation as an advantage</title><link href="http://localhost:4000/blog/limitations" rel="alternate" type="text/html" title="Limitation as an advantage" /><published>2019-01-17T00:00:00+05:30</published><updated>2019-01-17T00:00:00+05:30</updated><id>http://localhost:4000/blog/limitations</id><content type="html" xml:base="http://localhost:4000/blog/limitations">&lt;p&gt;Okay, that’s a lot of A’s after a lonely L. But seriously, I’ve been moulding limitations to my advantage since my early high school days.&lt;/p&gt;

&lt;p&gt;Lack of abundant pocket money pushed me into exploring freelance writing jobs at some of the leading online magazines back in those days. And boy, I did make some sweet money out of those jobs. It was a big deal to get a &lt;strong&gt;$100&lt;/strong&gt; paycheque for a 17-year-old dude. 💸&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://media.giphy.com/media/KJB7GQwyuAtW/giphy.gif&quot; alt=&quot;Getting that paycheque&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Again, recently, I found myself accidentally discovering a financial management trick by limiting myself to the &lt;em&gt;free&lt;/em&gt; version of a very popular expense tracking app.&lt;/p&gt;

&lt;p&gt;Full disclosure, I fully support indie devs and small companies by usually paying for software or other services that I find useful. 🙌🏻 This app, however, didn’t appeal to me with their &lt;strong&gt;Pro&lt;/strong&gt; version because I didn’t need what they were offering under a monthly subscription.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://budgetbakers.com/&quot; target=&quot;_blank&quot;&gt;Wallet&lt;/a&gt; app allows you to manage no more than &lt;strong&gt;2&lt;/strong&gt; bank accounts at a time on their free version. Paying a monthly subscription just to add another bank account to the list didn’t make sense to me.&lt;/p&gt;

&lt;p&gt;I decided to keep my savings account off the hook for the time being which turned out to be a bloody &lt;em&gt;brilliant&lt;/em&gt; money management hack. Since I didn’t get to see how much money I have in my savings account, I was always under the impression that I’m low on funds and needed to spend carefully.&lt;/p&gt;

&lt;p&gt;As an indirect result, my savings grew larger and expenses cut off by a reasonable amount. It was like a digital equivalent of putting money in an envelope and tucking it away somewhere safe.&lt;/p&gt;

&lt;p&gt;How good is that? 😎&lt;/p&gt;

&lt;p&gt;I know this might not be one of the top finance tips but every little bit helps.&lt;/p&gt;

&lt;p&gt;Find your limitations. Turn them around into your &lt;em&gt;advantages&lt;/em&gt;. Go be creative with your daily life.&lt;/p&gt;

&lt;p&gt;And one more thing, thanks for being a lovely audience. 👏🏻&lt;/p&gt;</content><author><name></name></author><summary type="html">Be creative about your limitations and transform them into solutions.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://media.giphy.com/media/KJB7GQwyuAtW/giphy.gif" /></entry><entry><title type="html">Why I finally got a credit card</title><link href="http://localhost:4000/blog/finally-credit-card" rel="alternate" type="text/html" title="Why I finally got a credit card" /><published>2019-01-14T00:00:00+05:30</published><updated>2019-01-14T00:00:00+05:30</updated><id>http://localhost:4000/blog/finally-credit-card</id><content type="html" xml:base="http://localhost:4000/blog/finally-credit-card">&lt;p&gt;Last &lt;strong&gt;February&lt;/strong&gt;, I &lt;a href=&quot;https://rahulchowdhury.co/blog/zero-credit&quot; target=&quot;_blank&quot;&gt;ranted&lt;/a&gt; on this very blog as to why you shouldn’t get a credit card.&lt;/p&gt;

&lt;p&gt;Yet, in around the month of &lt;strong&gt;November&lt;/strong&gt;, the financial system convinced me otherwise.&lt;/p&gt;

&lt;p&gt;You see, in &lt;strong&gt;December&lt;/strong&gt;, I was about to get married. Weddings are a costly affair. Also, unfortunately, I hadn’t been much of a financial pro in my early days of employment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;, I needed a shit ton of money which I didn’t have.&lt;/p&gt;

&lt;p&gt;Loans seemed to be my easy way out of this situation. Yet, when I started applying for a loan, nearly every bank showed me the door.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because I &lt;em&gt;didn’t have&lt;/em&gt; any credit score.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because I never took out any loans and neither did I get a credit card for myself. And long gone are the days where banks examined your earning records and took a leap on loading you with money.&lt;/p&gt;

&lt;p&gt;It’s all &lt;em&gt;numbers&lt;/em&gt; now.&lt;/p&gt;

&lt;p&gt;Kind of funny that I used to get calls from bank executives all year long to apply for a loan. When I actually did, they were like, “Yeah, whatever! 😏”&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Poor me.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After a month of running around and stressful nights, one of the banks decided to loan me the amount anyways. &lt;strong&gt;+1&lt;/strong&gt; to ICICI Bank. 🏦&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://media.giphy.com/media/rjkJD1v80CjYs/giphy.gif&quot; alt=&quot;Phew!&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After this delightfully painful experience, regardless of my better judgement, I decided to go for a credit card. The catch here was that I would use it &lt;em&gt;only&lt;/em&gt; like a debit card.&lt;/p&gt;

&lt;p&gt;I would route most of my monthly expenses through the credit card but have the cash &lt;em&gt;reserved&lt;/em&gt; in my bank account to pay the bill on the first day I get the statement.&lt;/p&gt;

&lt;p&gt;Chances of misusing a credit card are low if you choose to use it like this. Also, if you have a wife who’s there to spank you in case you start being a bad kid. &lt;em&gt;Thank you, love.&lt;/em&gt;💖&lt;/p&gt;

&lt;p&gt;Although, I’m yet to find out how well I can handle my shiny new credit card. 😈 Another post on that soon enough (that is if I don’t have to sell this laptop to pay for my credit card bills 😝)&lt;/p&gt;

&lt;p&gt;Thank you for reading this post. You’re awesome! 🙌🏻&lt;/p&gt;</content><author><name></name></author><summary type="html">You should have one too if you can use it sensibly.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://media.giphy.com/media/rjkJD1v80CjYs/giphy.gif" /></entry><entry><title type="html">The Will of a Spider</title><link href="http://localhost:4000/blog/spiders-will" rel="alternate" type="text/html" title="The Will of a Spider" /><published>2018-06-14T00:00:00+05:30</published><updated>2018-06-14T00:00:00+05:30</updated><id>http://localhost:4000/blog/spiders-will</id><content type="html" xml:base="http://localhost:4000/blog/spiders-will">&lt;p&gt;There lives a spider in my bathroom. Its &lt;em&gt;glamorous&lt;/em&gt; web is stationed right above my washbasin between the wall and the handle of my liquid hand wash.&lt;/p&gt;

&lt;p&gt;For days I didn’t notice the web. Neither did I track down the spider. The first day when I took note of this little establishment I immediately splashed it down.&lt;/p&gt;

&lt;p&gt;Happy with my little cleaning, I went back feeling &lt;em&gt;accomplished&lt;/em&gt;. Little did I know that it wasn’t the end. For this was &lt;strong&gt;a tough spider&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As I entered my bathroom the very next day, I found a web identical to the one I had destroyed a day earlier. Same spot. The spider had &lt;em&gt;rebuilt&lt;/em&gt; its empire again.&lt;/p&gt;

&lt;p&gt;I thought to myself, “&lt;em&gt;Big deal, I’ll splash it again&lt;/em&gt;”. So I did, only to find out that the web has been restored the very next day as well.&lt;/p&gt;

&lt;p&gt;For days, I kept destroying and the spider kept building. That was until I finally gave up.&lt;/p&gt;

&lt;p&gt;The spider’s will to build proved to be &lt;em&gt;greater&lt;/em&gt; than my will to destroy. It didn’t give up no matter how many times I wiped out its home.&lt;/p&gt;

&lt;h3 id=&quot;we-humans-have-a-lot-to-learn-from-the-other-species-lets-keep-learning-and-evolving&quot;&gt;We humans have a lot to learn from the other species. Let’s keep learning and evolving.&lt;/h3&gt;</content><author><name></name></author><summary type="html">Sometimes, an insect can prove to be better than a human.</summary></entry><entry><title type="html">Wait for it</title><link href="http://localhost:4000/blog/wait-for-it" rel="alternate" type="text/html" title="Wait for it" /><published>2018-05-09T00:00:00+05:30</published><updated>2018-05-09T00:00:00+05:30</updated><id>http://localhost:4000/blog/wait-for-it</id><content type="html" xml:base="http://localhost:4000/blog/wait-for-it">&lt;p&gt;Today I got a &lt;strong&gt;MacBook Pro&lt;/strong&gt; at a &lt;em&gt;slightly&lt;/em&gt; lower price because I waited.&lt;/p&gt;

&lt;p&gt;You see, &lt;strong&gt;Amazon&lt;/strong&gt; lists a product supplied by more than just one seller. The seller with the best offer usually makes the product page feature.&lt;/p&gt;

&lt;p&gt;For the past &lt;strong&gt;2 weeks&lt;/strong&gt;, the best offer was around &lt;strong&gt;$250&lt;/strong&gt; more than what was the best offer before that time. The previous seller went out of stock.&lt;/p&gt;

&lt;p&gt;Given that I had a few weeks before I actually needed the laptop, I decided to wait in case a &lt;em&gt;better&lt;/em&gt; offer comes in. Today, that previous offer came back, from the same seller who listed the product around &lt;strong&gt;2 weeks&lt;/strong&gt; back.&lt;/p&gt;

&lt;p&gt;Without any further ado, I made the purchase. Waiting a few more days &lt;em&gt;saved&lt;/em&gt; me a lot of money.&lt;/p&gt;

&lt;h3 id=&quot;sometimes-somethings-are-worth-the-wait-wait-for-the-right-moment&quot;&gt;Sometimes somethings are worth the wait. Wait for the right moment.&lt;/h3&gt;</content><author><name></name></author><summary type="html">Waiting for the right moment can sometimes prove to be beneficial.</summary></entry><entry><title type="html">First impression is not the last</title><link href="http://localhost:4000/blog/first-impressions" rel="alternate" type="text/html" title="First impression is not the last" /><published>2018-04-29T00:00:00+05:30</published><updated>2018-04-29T00:00:00+05:30</updated><id>http://localhost:4000/blog/first-impressions</id><content type="html" xml:base="http://localhost:4000/blog/first-impressions">&lt;p&gt;People say that first impressions are the &lt;em&gt;last&lt;/em&gt;. I beg to differ.&lt;/p&gt;

&lt;p&gt;First impressions can often be &lt;em&gt;misleading&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;You might judge someone to be &lt;strong&gt;friendly&lt;/strong&gt;, &lt;strong&gt;nice&lt;/strong&gt;, &lt;strong&gt;trustworthy&lt;/strong&gt;, and &lt;strong&gt;decent&lt;/strong&gt; while that person might turn out to be &lt;em&gt;pure evil&lt;/em&gt; in the future.&lt;/p&gt;

&lt;p&gt;Similarly, someone who might seem an &lt;strong&gt;asshole&lt;/strong&gt; at first can turn out to be one of the &lt;em&gt;best persons&lt;/em&gt; you’ve ever met.&lt;/p&gt;

&lt;p&gt;The point that I’m trying to make here is that don’t judge a person by their first impression. First impressions are &lt;em&gt;not&lt;/em&gt; always an honest one. They can be &lt;em&gt;framed&lt;/em&gt; or might be a screw-up out of &lt;em&gt;being nervous&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Get to know a person and then judge. It’ll help you in selecting the right people to surround yourself with.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Time tells everything.&lt;/em&gt; Give people some time.&lt;/p&gt;

&lt;h3 id=&quot;while-it-might-seem-lucrative-dont-trust-your-first-impressions-they-often-lie&quot;&gt;While it might seem lucrative, don’t trust your first impressions. They often lie.&lt;/h3&gt;</content><author><name></name></author><summary type="html">First impressions are not always the last one. Give people a chance.</summary></entry><entry><title type="html">Casualty List</title><link href="http://localhost:4000/blog/casualty-list" rel="alternate" type="text/html" title="Casualty List" /><published>2018-04-27T00:00:00+05:30</published><updated>2018-04-27T00:00:00+05:30</updated><id>http://localhost:4000/blog/casualty-list</id><content type="html" xml:base="http://localhost:4000/blog/casualty-list">&lt;p&gt;When you’re &lt;em&gt;swamped&lt;/em&gt; with tasks to complete in a short time, what do you do?&lt;/p&gt;

&lt;p&gt;Do you panic or do you suddenly get the &lt;em&gt;superpower&lt;/em&gt; to glide through your tasks like a walk in the park?&lt;/p&gt;

&lt;p&gt;If your answer is the latter then, well, you’re all set. However, for the rest of us, the first option is the one that &lt;em&gt;suits&lt;/em&gt; the best.&lt;/p&gt;

&lt;p&gt;We &lt;em&gt;panic&lt;/em&gt;, we &lt;em&gt;stress&lt;/em&gt; out when we’re dumped with a shitload of tasks to complete in a day or in an hour.&lt;/p&gt;

&lt;p&gt;What to do then?&lt;/p&gt;

&lt;p&gt;Make your &lt;strong&gt;casualty list.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What is a casualty list?&lt;/p&gt;

&lt;p&gt;It’s a list of tasks that you can’t do or choose &lt;em&gt;not to do&lt;/em&gt; within the given time period.&lt;/p&gt;

&lt;p&gt;Making a casualty list helps because sometimes it’s impossible to check off all of your pending tasks at a given time. You have to &lt;em&gt;sacrifice&lt;/em&gt; some to complete the ones that are your top priority.&lt;/p&gt;

&lt;p&gt;The ones you sacrifice gets transferred to your casualty list.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Try it.&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;when-youre-overwhelmed-with-tasks-at-hand-try-making-a-casualty-list-itll-help-you-remain-sane&quot;&gt;When you’re overwhelmed with tasks at hand, try making a casualty list. It’ll help you remain sane.&lt;/h3&gt;</content><author><name></name></author><summary type="html">A casualty list helps you stay sane when you’re bombarded with things to do.</summary></entry><entry><title type="html">Using a To-Do list</title><link href="http://localhost:4000/blog/to-do-lists" rel="alternate" type="text/html" title="Using a To-Do list" /><published>2018-04-24T00:00:00+05:30</published><updated>2018-04-24T00:00:00+05:30</updated><id>http://localhost:4000/blog/to-do-lists</id><content type="html" xml:base="http://localhost:4000/blog/to-do-lists">&lt;p&gt;To-do lists have been around for &lt;em&gt;decades&lt;/em&gt;. It’s like having &lt;strong&gt;a personal assistant&lt;/strong&gt; telling us what should we be doing next.&lt;/p&gt;

&lt;p&gt;The main problem with to-do lists is that they are &lt;em&gt;hard to maintain&lt;/em&gt;. For starters, you need to be &lt;em&gt;disciplined&lt;/em&gt; to make one every day.&lt;/p&gt;

&lt;p&gt;Sure, some might say that paper to-do lists work better for them than their digital counterparts but I don’t think that’s much of an issue.&lt;/p&gt;

&lt;p&gt;I use &lt;a href=&quot;https://todoist.com/&quot; target=&quot;_blank&quot;&gt;Todoist&lt;/a&gt; to plan out my day and it works &lt;em&gt;just fine&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The trick that I follow here is to plan out my list on the night before. That means I’ll plan out all the things that I need to do tomorrow &lt;em&gt;by tonight&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This saves you from the &lt;em&gt;hurry&lt;/em&gt; to jot down your tasks in the morning. You wake up and you know what to do.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Before you eat the elephant, make sure you know what parts you want to eat. &lt;em&gt;TODD STOCKER&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s &lt;em&gt;a habit&lt;/em&gt;. Like every other habit, it takes time to develop.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Invest&lt;/em&gt; some time in this habit. It’ll help you in the long run.&lt;/p&gt;

&lt;h3 id=&quot;a-to-do-list-if-used-properly-can-save-you-from-a-lot-of-procrastination-make-one-daily&quot;&gt;A to-do list, if used properly, can save you from a lot of procrastination. Make one, daily.&lt;/h3&gt;</content><author><name></name></author><summary type="html">To-do lists are not bullshit. They’re useful if you know how to use them.</summary></entry></feed>
bkendall commented 5 years ago

I'm still unable to replicate this issue.

One thing I can suggest is to delete the cache that the cli creates when hashing files. From your project's root directory (where your firebase.json file lives, where firebase deploy is run), delete the .firebase/hosting.*.cache files (you can see them using ls -al .firebase/ on linux/osx). That might help your situation, but nothing's sticking out to tell me that that is 100% the solution.

If you're unable to create a smaller reproduction case, please send a bug report through the Firebase Support page. There may be something happening on the backend side of things that's returning this 400, but we'll need more details from you which support can help gather. If you drop your case ID here, I can help bring it up with the team as well.

Thanks - and sorry I don't have a better answer off hand! :(

thb commented 5 years ago

same problem here

thechenky commented 5 years ago

@thb since we're unable to replicate this issue, please file a support ticket with info on your specific project and configuration - as @bkendall mentioned, it would help us to have more details.

rahulchowdhury commented 5 years ago

@bkendall I tried your solution. Doesn't help. It's the same issue. The feed.xml file generated by Jekyll doesn't get uploaded.

Anyways, I've filed a report for the same. Hope this gets fixed soon.

google-oss-bot commented 5 years ago

Hey @rahulchowdhury. We need more information to resolve this issue but there hasn't been an update in 7 days. I'm marking the issue as stale and if there are no new updates in the next 3 days I will close it automatically.

If you have more information that will help us get to the bottom of this, just add a comment!

google-oss-bot commented 5 years ago

Since there haven't been any recent updates here, I am going to close this issue.

@rahulchowdhury if you're still experiencing this problem and want to continue the discussion just leave a comment here and we are happy to re-open this.

mtlynch commented 5 years ago

@rahulchowdhury @thb - I had this same issue. It turned out that it was because I had localhost URLs in my XML file. I see them in @rahulchowdhury's example feed.xml as well. Once I changed these to publicly routable hostnames, I was able to firebase deploy successfully.