Service Unavailable
-
Hey, I am using a server with NGINX and can’t update, the error ist, Download failed, Service Unavailable.
The WordPress Debug only says:
[01-Mar-2025 19:14:28 UTC] PHP Deprecated: Calling get_class() without arguments is deprecated in /wp-content/plugins/updatepulse-server/inc/nonce/class-nonce.php on line 197
[01-Mar-2025 19:14:28 UTC] PHP Deprecated: Calling get_class() without arguments is deprecated in /wp-content/plugins/updatepulse-server/inc/nonce/class-nonce.php on line 198
[01-Mar-2025 19:14:28 UTC] PHP Deprecated: Calling get_class() without arguments is deprecated in /wp-content/plugins/updatepulse-server/inc/nonce/class-nonce.php on line 201
[01-Mar-2025 19:14:28 UTC] PHP Deprecated: Calling get_class() without arguments is deprecated in /wp-content/plugins/updatepulse-server/inc/nonce/class-nonce.php on line 202
[01-Mar-2025 19:14:28 UTC] PHP Deprecated: Calling get_class() without arguments is deprecated in /wp-content/plugins/updatepulse-server/inc/nonce/class-nonce.php on line 204
-
Hello and thank you for your interest in UpdatePulse Server!
Preliminary Troubleshoot
If you’re willing, we can attempt doing some troubleshooting.
- Please first update to 1.0.3 – I just released a new version addressing the warnings you reported (thank you!), among a few other things
- In your UP Server’s Packages Overview, click the “Details” link of the package for which the update failed.
- Check out the
update_url
down the bottom of the JSON info (it’s new!) - Copy this URL and open it in your browser: you should see the same JSON your plugins see when they attempt to check for update
- If the package you attempt to update does not require a license (which would be ideal for troubleshooting purposes), you should see a
download_url
property (note how this URL has a token – the next steps to test should be undertaken ASAP so that it does not expire) ; this is the URL your plugins use when they attempt to download an update - Make sure to enable Pretty print in your browser to get rid of the extra slashes in URLs (Chrome has a checkbox at the top, for instance)
- Copy this URL and open it in your browser: the download should start
- Report here anything unusual
While doing the above, the following would help:
- Keep an eye on the PHP logs
- Use the Dummy Plugin from the UpdatePulse Server Integration Examples repository – this is what I use to test
Going Further
If you’re willing, we could try and explore with more direct involvement.
Please do not give me any credentials or do not create any account on any site for me.
What we could do, though, is attempt a package update from my end, I could replicate your issue, and check the actual response from the update API.Here are the requirements for more advanced troubleshooting:
- Provide the home URL of your UP Server in
Link to the page you need help with
(likehttps://your-updatepulse-server.tld
) - Provide updates for the Dummy Plugin package with no license requirement through your UP Server
Please let me know!
Hey @frogerme, yes that how I test it. What I found so far is, that inside the URI the ‘%2F’ don’t get encoded as ‘/’.
Hi there!
Could you please give more details? Which url are looking at with “the URI”? And what parameter in that URI is supposed to contain forward slashes?
Best
It’s the URI of the “Update now” button that you have to click to install the update.
If you change it to a slash, and put it in the adressbar, the update it works.Hi and thank you!
Here is what I have on my test environment (see the URL, properly encoded).
Do you have anything different? Could you provide a screenshot?Hey, in your screenshot, you also have the ?‘%2F’… I think I will try to remove the pulse server and the dummy plugin and start over from zero.
I have now removed everything and installed fresh. There are only depreciated warnings, but I still get the error if I try ti update.
[03-Mar-2025 09:45:00 UTC] PHP Deprecated: Anyape\UpdatePulse\Server\Server\Update\Package::from_archive(): Implicitly marking parameter $cache as nullable is deprecated, the explicit nullable type must be used instead in /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/updatepulse-server/inc/server/update/class-package.php on line 69
[03-Mar-2025 09:46:37 UTC] PHP Deprecated: Anyape\Parsedown::blockSetextHeader(): Implicitly marking parameter $Block as nullable is deprecated, the explicit nullable type must be used instead in /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/updatepulse-server/lib/parsedown/Parsedown.php on line 394
[03-Mar-2025 09:46:37 UTC] PHP Deprecated: Anyape\Parsedown::blockTable(): Implicitly marking parameter $Block as nullable is deprecated, the explicit nullable type must be used instead in /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/updatepulse-server/lib/parsedown/Parsedown.php on line 474
[03-Mar-2025 09:47:23 UTC] PHP Deprecated: YahnisElsts\PluginUpdateChecker\v5p3\UpdateChecker::fixSupportedWordpressVersion(): Implicitly marking parameter $update as nullable is deprecated, the explicit nullable type must be used instead in /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/dummy-plugin/lib/plugin-update-checker/Puc/v5p3/UpdateChecker.php on line 365
[03-Mar-2025 09:47:23 UTC] PHP Deprecated: YahnisElsts\PluginUpdateChecker\v5p3\StateStore::setUpdate(): Implicitly marking parameter $update as nullable is deprecated, the explicit nullable type must be used instead in /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/dummy-plugin/lib/plugin-update-checker/Puc/v5p3/StateStore.php on line 80In the browser Console is a js error:
TypeError: undefined is not an object (evaluating 't.attr') -> updates.min.js:219:101
Hi!
The trace does not seem to indicate anything related to your error. the
%2F
is actually required: it’s encoding the parameter so that the slash not considered a URL fragment. You can see it in all update links – for instance, for WooCommerce:https://sub.domain.tld/wp-admin/update.php?action=upgrade-plugin&plugin=woocommerce%2Fwoocommerce.php&_wpnonce=84b468e2wf
Circling back to the procedure outlined earlier:
- Question 1: what happens at step 7?
- Question 2: If nothing unusual happens at step 7, are you able to update any other plugin not using UP Server? You can edit the plugin version manually (in the example, I changed “* Version: 9.7.0” to “* Version: 9.6.0” in
woocommerce%2Fwoocommerce.php
to get the above URL).
Indeed, all other plugins are updating…. Here are the outputs of Step 7: WP-Update Page: Service Unavailable
Step 7 Output:
{
"name": "Dummy Plugin",
"version": "1.5.1",
"homepage": "https://anyape.com/",
"author": "Alexandre Froger",
"author_homepage": "https://froger.me/",
"description": "Empty plugin to demonstrate the UpdatePulse Updater.",
"details_url": "https://anyape.com/",
"requires": "4.9.8",
"tested": "4.9.8",
"requires_php": "7.0",
"sections": {
"description": "
Plugin description. Basic HTML can be used in all sections.",
"dummy_section": "
An extra, dummy section.",
"installation": "
Installation instructions.",
"changelog": "
This section will be displayed by default when the user clicks 'View version x.y.z details'.",
"frequently_asked_questions": "How does it work?
\n
It works by doing things.\nIt's not working!
\n
It's not working because it's not doing things.\nCan I get a refund?
\n
No. You can't get a refund for free things.\nCan I get a refund please?
\n
Yes. Here is your refund for your free thing: $0.00."
},
"last_updated": "2025-03-03 16:50:27",
"icons": {
"1x": "https://raw.githubusercontent.com/anyape/updatepulse-server-integration/main/assets/icon-128x128.png",
"2x": "https://raw.githubusercontent.com/anyape/updatepulse-server-integration/main/assets/icon-256x256.png"
},
"banners": {
"low": "https://raw.githubusercontent.com/anyape/updatepulse-server-integration/main/assets/banner-772x250.png",
"high": "https://raw.githubusercontent.com/anyape/updatepulse-server-integration/main/assets/banner-1544x500.png"
},
"require_license": "",
"slug": "dummy-plugin",
"type": "plugin",
"metadata": {
"whitelisted": {
"local": [
true,
1741020627
]
},
"timestamp": 1741020627,
"origin": "manual"
},
"file_name": "dummy-plugin.zip",
"file_path": "/var/www/vhosts/domain.com/httpdocs/wp-content/uploads/updatepulse-server/packages/dummy-plugin.zip",
"file_size": 191702,
"file_last_modified": 1741020627,
"etag": "7e8e59e96f6a88b958a802f6ccdc53d2",
"digests": {
"sha1": "764279a5ef1be6da41e6f591324e41784ab8e7a1",
"sha256": "b6fd4bd29e4398b3c29fed3e7ad68c3e6f603b7a4b5bd42ba98d12436b1813d1",
"sha512": "17b799c2f5bc9d0d3242af2a9545fbb64a775c83f50e75d0c9374c6ece47bdcbeb8be81911d299395b5f07db4c9fd473ea5739d280e446f61872ebd07b04e8e2",
"crc32": "7144aeac",
"crc32c": "2fe8d8ac"
},
"update_url": "https://www.domain.com/updatepulse-server-update-api/?action=get_metadata&package_id=dummy-plugin&installed_version=1.5.1&php=8.4.4&locale=de_DE_formal&checking_for_updates=1&update_type=Plugin"
}
Step 7 URL Output:
{
"name": "Dummy Plugin",
"version": "1.5.1",
"homepage": "https:\/\/anyape.com\/",
"author": "Alexandre Froger",
"author_homepage": "https:\/\/froger.me\/",
"description": "Empty plugin to demonstrate the UpdatePulse Updater.",
"details_url": "https:\/\/anyape.com\/",
"requires": "4.9.8",
"tested": "4.9.8",
"requires_php": "7.0",
"sections": {
"description": "
Plugin description. Basic HTML<\/strong> can be used in all sections.<\/p><\/div>",
"dummy_section": "
An extra, dummy section.<\/p><\/div>",
"installation": "
Installation instructions.<\/p><\/div>",
"changelog": "
This section will be displayed by default when the user clicks 'View version x.y.z details'.<\/p><\/div>",
"frequently_asked_questions": "How does it work?<\/h4>\nIt works by doing things.<\/p>\nIt's not working!<\/h4>\nIt's not working because it's not doing things.<\/p>\nCan I get a refund?<\/h4>\nNo. You can't get a refund for free things.<\/p>\nCan I get a refund please?<\/h4>\nYes. Here is your refund for your free thing: $0.00.<\/p><\/div>"
},
"last_updated": "2025-03-03 16:50:27",
"icons": {
"1x": "https:\/\/raw.githubusercontent.com\/anyape\/updatepulse-server-integration\/main\/assets\/icon-128x128.png",
"2x": "https:\/\/raw.githubusercontent.com\/anyape\/updatepulse-server-integration\/main\/assets\/icon-256x256.png"
},
"banners": {
"low": "https:\/\/raw.githubusercontent.com\/anyape\/updatepulse-server-integration\/main\/assets\/banner-772x250.png",
"high": "https:\/\/raw.githubusercontent.com\/anyape\/updatepulse-server-integration\/main\/assets\/banner-1544x500.png"
},
"require_license": "",
"slug": "dummy-plugin",
"type": "plugin",
"download_url": "https:\/\/www.domain.com\/updatepulse-server-update-api\/?action=download&package_id=dummy-plugin&update_type=Plugin&token=a82b2dc2cd1484cc7b6bd14197167202",
"time_elapsed": "0.097s"
}After trying some things out:
Have you tested your plugin on nginx with permalinks?
It looks like that your API-URL gets rewritten by WordPress on nginx with permalinks.Ref: https://developer.www.ads-software.com/advanced-administration/server/web-server/nginx/
Thanks for the details.
Here are the outputs of Step 7:
More importantly:
7. Copy this URL and open it in your browser: the download should start
What is happening when you visit the URL (with an updated token, and pretty-printed as outlined in step 6, not with all these backslashes):
"download_url": "https:\/\/www.domain.com\/updatepulse-server-update-api\/?action=download&package_id=dummy-plugin&update_type=Plugin&token=a82b2dc2cd1484cc7b6bd14197167202",
It looks like that your API-URL gets rewritten by WordPress on nginx with permalinks.
UP Server does not alter the main htaccess file in any way. It relies on WordPress’ internal mechanism using
add_rewrite_rule
.
Since you do get an output on theupdatepulse-server-update-api/?action=get_metadata
endpoint, you can be sure the plugin’s API permalinks are therefore working.Hey, nginx ignores htaccess files, they are only relevant for Apache Webservers.
I get an error 503, so I am pretty sure that the problem is based on nginx with your plugin.
GET /updatepulse-server-update-api/?action=download&package_id=dummy-plugin&update_type=Plugin&token=12f21e780301e630846d8effadb958ea HTTP/1.1" 503 2234 "-" "WordPress/6.7.2;
Hi!
Thank you for reminding other readers of this forum that htaccess is only relevant for Apache.
Indeed, this is why UP Server does not in any way rely on htaccess for its endpoints, but instead usesadd_rewrite_rule
core WordPress function.If the issue came from URL rewrites, then you would experience a 404 error, not a 503.
Common causes of 503 are that a server is down for maintenance or overloaded – I cannot establish whether this apply in your case.
If the issue came from URL rewrites, you would also not be able to reach the JSON output API.
Moreover, UP Server does not in any way exit with a 503 error code.For all these reasons, the issue cannot come from URL rewrites. This issue cannot be about how NGINX rewrite rules with this plugin specifically in contrast to how Apache does it. If there is a configuration issue that affects UP Server, it is elsewhere.
Because I cannot have access to the server configuration, I can only let you know what my test environment looks like. Yes, I do use Apache, but as determined above, the issue is not related to how it rewrites urls.
I do hope this can help, and if not, that we can continue troubleshooting with more information and diagnosis from your side.
Hey, today I have done a clean fresh install of WordPress and the update plugin on the server.
Updates are not possible, it always says error 503.
I am don’t come any further so far. The debug log is empty.GET /updatepulse-server-update-api/?action=get_metadata&package_id=dummy-plugin&installed_version=1.5.0&php=8.4.4&locale=de_DE_formal&checking_for_updates=1&update_type=Plugin HTTP/1.1″ 200
GET /updatepulse-server-update-api/?action=download&package_id=dummy-plugin&update_type=Plugin&token=9656e86ee8fe837643b7f4e287f21960 HTTP/1.1″ 503 <-
Hi!
How much control do you have over the server? You mentioned that the debug log is empty. Which file is the debug log? This seems odd that there is no trace of the issue – are you the sole admin of the server, or is there some support you can contact?
Some possible areas to check:
- Nginx error logs (
/var/log/nginx/error.log
) - PHP-FPM logs (
/var/log/php-fpm.log
) - WordPress debug logs (enable?
WP_DEBUG
?in?wp-config.php
) - Use?
top
,?htop
, or?free -m
?to monitor CPU, memory, and disk usage. - Test Nginx configuration:?
sudo nginx -t
(and reload Nginx:?sudo systemctl reload nginx
)
- You must be logged in to reply to this topic.