500 Internal Server Error After Upgrade from v2.8 to v2.10

66 views
Skip to first unread message

Di

unread,
Oct 29, 2025, 2:59:43 PM (6 days ago) Oct 29
to AtoM Users

Hello,

I am encountering a persistent 500 Internal Server Error after upgrading an application from version 2.8 to 2.10.

Environment:

  • OS: Ubuntu 24.04 (New)

  • PHP: 8.3 (New)

  • Database: MySQL 8.0+ (Both servers: old & new)

  • Search: Elasticsearch 7.10+ (New)

Steps Taken:

  1. Performed a fresh installation of version 2.10 on a new server. This was successful and accessible.

  2. Imported the database from the old v2.8 server using mysqldump.

  3. Executed the database upgrade command:

    bash
    php -d memory_limit=-1 symfony tools:upgrade-sql

    The command returned: ">> upgrade-sql Successfully upgraded to Release 2.10.0 v197".

  4. Restarted all relevant services: atom-workerphp8.3-fpmmysql, and nginx.

Despite these steps, the 500 error remains. I followed the official guide for both fresh installation and upgrading. Could you please help identify what might be missing or misconfigured?


tail -f /var/log/nginx/error.log

2025/10/29 18:46:55 [error] 2739#2739: *19 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: explode(): Argument #2 ($string) must be of type string, array given in /usr/share/nginx/atom/lib/filter/QubitLimitIp.class.php:63
Stack trace:
#0 /usr/share/nginx/atom/lib/filter/QubitLimitIp.class.php(63): explode()
#1 /usr/share/nginx/atom/lib/filter/QubitLimitIp.class.php(31): QubitLimitIpFilter->setLimit()
#2 /usr/share/nginx/atom/cache/qubit/prod/config/config_core_compile.yml.php(1054): QubitLimitIpFilter->execute()
#3 /usr/share/nginx/atom/lib/filter/QubitSettingsFilter.class.php(58): sfFilterChain->execute()
#4 /usr/share/nginx/atom/cache/qubit/prod/config/config_core_compile.yml.php(1054): QubitSettingsFilter->execute()
#5 /usr/share/nginx/atom/cache/qubit/prod/config/config_core_compile.yml.php(1018): sfFilterChain->execute()
#6 /usr/share/nginx/atom/cache/qubit/prod/config/config_core_compile.yml.php(1054): sfRenderingFilter->execute()
#7 /usr/share/nginx/atom/plugins/sfHistoryPlugin/lib/sfHistoryPluginFilter.class.php(20): sfFilterCha" while reading response header from upstream, client: 4.205.218.99, server: _, request: "HEAD / HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm.atom.sock:", host: "4.205.218.99"




Di

unread,
Oct 29, 2025, 3:38:49 PM (6 days ago) Oct 29
to AtoM Users
Hello Dan

I don't know if this is bug on the v2.10?  troubleshooting with ChatGPT. 

Problem

This line:  /usr/share/nginx/atom/lib/filter/QubitLimitIp.class.php


$this->limit = explode(';', sfConfig::get('app_limit_admin_ip', []));

is always passing an array to explode() when the config key app_limit_admin_ip is not set — because the default value is [] (an empty array).

Even if the config is set, if it’s defined as a YAML array (e.g., in app.yml), sfConfig::get() will return an array, not a string — and explode() will fail.


Correct Fix

Update the setLimit() method to handle both string and array cases:


php
public function setLimit()
{
$configValue = sfConfig::get('app_limit_admin_ip', []);

if (is_array($configValue)) {
$this->limit = $configValue;
} else {
// Treat as string; split by ';' and filter out empty values
$this->limit = $configValue ? array_filter(array_map('trim', explode(';', $configValue))) : [];
}
 Configuration Tip
 
yaml
all:
app_limit_admin_ip: "192.168.1.1;10.0.0.1"


If use this fix method, it works. Atom can accessible without 500 Error.  I am not developer, so don't know if this is bug issue need to fix for the next version. Please let your developer team to analyze. 






smi...@plu.edu

unread,
Oct 31, 2025, 4:40:05 PM (4 days ago) Oct 31
to AtoM Users
I got the same error today going from 2.7 to 2.10 and this fix worked for me. Hopefully we can get an official response and explanation.

Di

unread,
Nov 1, 2025, 4:23:41 AM (4 days ago) Nov 1
to AtoM Users
I found there is more simple way to modify the source code 

Edit File:
/usr/share/nginx/atom/lib/filter/QubitLimitIp.class.php

Change line ~63 from:
$this->limit = explode(';', sfConfig::get('app_limit_admin_ip', []));
To: $this->limit = explode(';', (string) sfConfig::get('app_limit_admin_ip', ''));

It also works. 

Di

unread,
Nov 1, 2025, 4:34:59 AM (3 days ago) Nov 1
to AtoM Users
BTW,  if upgrade to v2.9.2 version, there is no such issue. only happend on the v2.10 version in my case. 

Sarah Mason

unread,
Nov 3, 2025, 5:36:47 AM (yesterday) Nov 3
to AtoM Users
Hi all,

I will raise this thread with the maintainers. If you are confident it might be a bug, you can report it in AtoM's GitHub issues. It will be checked and triaged by the team.

We do recommend to update versions of AtoM incrementally, as there can be issues when skipping versions. This may not be the case, but if you upgrade from 2.9.2 to 2.10.0, please let us know.

Best wishes,

Sarah Mason
Contributor Success Specialist

Sarah Mason

unread,
Nov 3, 2025, 12:52:26 PM (yesterday) Nov 3
to AtoM Users
Hi Di,

Thank you for reporting the issue in GitHub! It's already been looked at and discussed by the maintainers and they've checked through this thread. They've flagged with me that there's already an existing issue for this, so they will link your issue to that before closing it so we don't have duplicates. The title might not have been clear if you were looking for it before.

We're planning to get this fixed soon and the fix you've proposed is similar to what you are implementing, so it was an excellent suggestion. Until the fix is in a release, this could be a workaround in the meantime. Thank you for sharing.

Best wishes,
Sarah

Di

unread,
12:29 PM (3 hours ago) 12:29 PM
to AtoM Users
Hi Sarah:

Have any plan to release new version to fix this issue? if there is long time to wait, probably, we have to deploy old version v2.9.2 on our environment.  

Thanks,
Di
Reply all
Reply to author
Forward
0 new messages