Strapi Cloud: Transfer process failed

System Information
  • Strapi Version: 4.8.2
  • Operating System: Strapi Cloud
  • Database: Strapi Cloud
  • Node Version: 16.19.0
  • NPM Version: 8.19.3
  • Yarn Version: 1.22.19

When running yarn strapi transfer --to https://my.strapi.cloud.url/admin from my existing instance, after entering my transfer token and selecting “Yes” to the delete all data warning, I get the following error:

Starting transfer...
error: [FATAL] Unexpected server response: 200
Transfer process failed.
error Command failed with exit code 1.

On the destination instance, the only log message I see is:

GET /admin/transfer/runner/connect (4 ms) 200
1 Like

I get code 400 and nothing at all logged at the server side. I checked and re-checked the URL. Would be nice if I could get a trace of what the transfer command is requesting. I guess I could run it through a net proxy, but that seems like hard work just to get some diagnostic output. In my case, I gave up on the transfer, because I also need to change media storage (from local file to GCP bucket) and the tool doesn’t handle that.

We also had an issue but the code is 500.

[2023-06-02 21:45:47.535] error: [FATAL] Unexpected server response: 500
Transfer process failed.

Any idea how to resolve this error?

I discovered, by looking through the code, that the transfer function relies on WebSocket connections. For me, those simply weren’t supported on App Engine, so although the initial HTTPS request could be made, the ‘upgrade’ didn’t work. App Engine really isn’t designed for long-lived requests, so I’ve migrated the solution to Cloud Run. However, that probably doesn’t explain your ‘500’ [internal server error] response … Are you able to examine the logs on the ‘remote’ instance to see if there are any clues there?

1 Like

I’m experiencing a similar status 200 error when attempting to push from local to a Strapi (v4.13.6) installation on DigitalOcean’s App Platform.

I have set the env variable STRAPI_DISABLE_REMOTE_DATA_TRANSFER=false and tried using both local and remote Transfer Tokens with full access to no avail.

It is worth noting that I am using a custom admin url “/dashboard” set in config/admin.js instead of the default “/admin”.

Here’s the error code I receive on my local machine:

$ strapi transfer --to https://[my-remote-strapi-installation].com/dashboard     
                    
? Please enter your transfer token for the remote Strapi destination [hidden]                                
? The transfer will delete existing data from the remote Strapi! Are you sure you want to proceed? Yes

[2023-09-14 00:34:41.368] error: [FATAL] Failed to initialize the connection: Unexpected server response 200
Transfer process failed.
error Command failed with exit code 1.

And the remote runtime logs show the following message:

[2023-09-14 06:34:41.485] http: GET /dashboard/transfer/runner/push (5 ms) 200

I was very excited when this feature was announced some releases ago, and thus would be incredibly grateful for help sorting the issue out.

SOLVED:

The issue was indeed the --to flag url, in my case. The url has to include the “/admin” endpoint, despite the admin url rewrite set in config/admin.js.

e.g.

strapi transfer --to https://[my-remote-strapi-installation].com/admin

You can change https to http. It helped me.

I had the same problem and could debug it in this way:

  • yarn develop on remote
  • yarn strapi transfer --from remote-address on my localhost
    The error 200 does not explain anything, but if you look at the terminal on remote it show details. For me, it was: error: Transfer Upgrade header expected 'websocket', found 'undefined'. Please ensure that your server or proxy is not modifying the Upgrade header.
    I could fix that in nginx config by updating the location / to:
   location / {
        proxy_pass http://127.0.0.1:5173;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }