Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Could not read public directory. Remove links and shortcuts and try again. (Firebase)

I was stepping through this tutorial:

https://codelabs.developers.google.com/codelabs/firebase-web/#0

On step 9 it asks you to execute firebase deploy but when I try to do it I get the error message:

Could not read public directory. Remove links and shortcuts and try again.

I don't know what it means by links and shortcuts as far as I can tell there nothing in this folder but plain old files.

The folder I'm trying to deploy is the web folder which should contain the completed sample.

Note that as per the instructions the storage.rules was updated with the name of the bucket and the index.html was updated with the firebase snippet.

The firebase.json file looks like this:

{
  "database": {
    "rules": "database-rules.json"
  },
  "storage": {
    "rules": "storage.rules"
  },
  "hosting": {
    "public": "./",
    "ignore": [
      "firebase.json",
      "database-rules.json",
      "storage.rules"
    ]
  }
}

Any ideas as to what this error could be? Is there any way to get more detailed information?

like image 862
Luis Perez Avatar asked Jun 06 '16 22:06

Luis Perez


4 Answers

You should use debug command like this: firebase deploy --debug , this can help you find out what cause this problem easily and clearly.

like image 108
Howard Chen Avatar answered Sep 29 '22 09:09

Howard Chen


In my case a temp emacs file was causing the issue:

$ firebase deploy

=== Deploying to 'xxxx-42402'...

i  deploying database, hosting
✔  database: rules ready to deploy.
i  hosting: preparing public directory for upload...

Error: Could not read public directory. Remove links and shortcuts and try again.
RooseveltPwnsU:xxxx xrdawson$ ls -la public/
total 3840
-rw-r--r--   1 xrdawson  staff     5122 Feb 13 12:52 #index.html#
drwxr-xr-x  15 xrdawson  staff      510 Feb 13 14:40 .
lrwxr-xr-x   1 xrdawson  staff       35 Feb  6 14:12 .#index.html -> [email protected]

Saving the file index.html inside emacs resolved the issue for me!

like image 39
xrd Avatar answered Sep 29 '22 09:09

xrd


The problem was firebase-debug.log

The issue turned out to be unrelated to the configuration. The issue actually turned out to be a file permission issue with firebase-debug.log. I solved the issue by copying everything but that file into a new folder and deploying the new folder.

How I found out

Since there is no way to tell that's the issue from the error message above. I thought it would still be useful to walk you through the process I used to uncover the issue.

Windows 10

First I want to mention that I'm on a Windows 10 computer, I don't know if that's relevant, but just in case it is I thought I'd mention it.

1. Compare to a working project

In order to have a baseline / frame of reference, I created a new project using the firebase init command.

I then tried to deploy that. That was successful, so I knew deployment in general worked.

2. Use the same firebase.json

I then took the auto generated firebase.json file from the working deployment folder and replaced the firebase.json file in the project folder where the deployment wasn't working.

When I tried to deployed it still didn't work.

3. Remove permissions

At this point I suspected it was a permission issue. So I decided to zip up the folder and then unzip it to a different folder. Then try to deploy the new folder.

The theory being that the permissions would be wiped out in the process.

When I tried to zip the file I got a file permission error message. The name of the file with the issue was firebase-debug.log. That's the file that automatically generated when you try to deploy.

firebase-debug.log is automatically generated by the firebase deploy command

So instead of zipping and unzipping I just copied all the files except firebase-debug.log and tried to deploy that.

Success

It worked!

Still haven't figured out how to actually delete that damn file though.

like image 43
Luis Perez Avatar answered Sep 29 '22 10:09

Luis Perez


After a rough search with no solution, I tried npm i then firebase deploy. Yay! it works.

like image 44
Sunday David Avatar answered Sep 29 '22 11:09

Sunday David