Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Carbon error from REST API cacher #11492

Closed
CedsTrash opened this issue Feb 24, 2025 · 10 comments · Fixed by #11496
Closed

Carbon error from REST API cacher #11492

CedsTrash opened this issue Feb 24, 2025 · 10 comments · Fixed by #11496
Labels

Comments

@CedsTrash
Copy link

CedsTrash commented Feb 24, 2025

Bug description

I just updated to 4.48.0 and I receive this error message when accessing API routes:
Carbon\Carbon::rawAddUnit(): Argument #3 ($value) must be of type int|float, string given, called in /home/forge/{DOMAIN}/vendor/nesbot/carbon/src/Carbon/Traits/Units.php on line 356

Sentry also notified me:
Image

How to reproduce

Simply upgrade to Statamic 5.48.0

Logs

Environment

Environment
Application Name: App
Laravel Version: 11.43.2
PHP Version: 8.3.12
Composer Version: 2.6.6
Environment: local
Debug Mode: ENABLED
URL: localhost:8000
Maintenance Mode: OFF
Timezone: America/Toronto
Locale: en

Cache
Config: NOT CACHED
Events: NOT CACHED
Routes: NOT CACHED
Views: NOT CACHED

Drivers
Broadcasting: reverb
Cache: file
Database: sqlite
Logs: stack / single
Mail: smtp
Queue: sync
Session: file

Sentry
Enabled: MISSING DSN
Environment: local
Laravel SDK Version: 4.13.0
PHP SDK Version: 4.10.0
Release: NOT SET
Sample Rate Errors: 100%
Sample Rate Performance Monitoring: 100%
Sample Rate Profiling: NOT SET
Send Default PII: DISABLED

Statamic
Addons: 5
Sites: 2 (App - EN, App - FR)
Stache Watcher: Enabled
Static Caching: Disabled
Version: 5.48.0 PRO

Statamic Addons
itiden/statamic-backup: 0.5.2
ndx/statamic-bard-color-picker: 2.0.1
nxstar/pages-without-seo: dev-staging
statamic/collaboration: 1.0.0
swiftmade/statamic-clear-assets: 3.1.0

Installation

Fresh statamic/statamic site via CLI

Additional details

No response

@duncanmcclean
Copy link
Member

Are you able to provide the full stack trace?

@CedsTrash
Copy link
Author

Here is the full stack trace:

[2025-02-24 08:04:07] staging.ERROR: Carbon\Carbon::rawAddUnit(): Argument #3 ($value) must be of type int|float, string given, called in /home/forge/{DOMAIN}/vendor/nesbot/carbon/src/Carbon/Traits/Units.php on line 356 {"exception":"[object] (TypeError(code: 0): Carbon\\Carbon::rawAddUnit(): Argument #3 ($value) must be of type int|float, string given, called in /home/forge/{DOMAIN}/vendor/nesbot/carbon/src/Carbon/Traits/Units.php on line 356 at /home/forge/{DOMAIN}/vendor/nesbot/carbon/src/Carbon/Traits/Units.php:455)
[stacktrace]
#0 /home/forge/{DOMAIN}/vendor/nesbot/carbon/src/Carbon/Traits/Units.php(356): Carbon\\Carbon::rawAddUnit()
#1 /home/forge/{DOMAIN}/vendor/nesbot/carbon/src/Carbon/Traits/Date.php(2903): Carbon\\Carbon->addUnit()
#2 /home/forge/{DOMAIN}/vendor/nesbot/carbon/src/Carbon/Traits/Date.php(2594): Carbon\\Carbon->callModifierMethod()
#3 /home/forge/{DOMAIN}/vendor/statamic/cms/src/API/AbstractCacher.php(58): Carbon\\Carbon->__call()
#4 /home/forge/{DOMAIN}/vendor/statamic/cms/src/API/Cachers/DefaultCacher.php(28): Statamic\\API\\AbstractCacher->cacheExpiry()
#5 /home/forge/{DOMAIN}/vendor/statamic/cms/src/API/Middleware/Cache.php(32): Statamic\\API\\Cachers\\DefaultCacher->put()
#6 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Statamic\\API\\Middleware\\Cache->handle()
#7 /home/forge/{DOMAIN}/vendor/statamic/cms/src/Http/Middleware/RequireStatamicPro.php(17): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#8 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Statamic\\Http\\Middleware\\RequireStatamicPro->handle()
#9 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(127): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#10 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Routing/Router.php(807): Illuminate\\Pipeline\\Pipeline->then()
#11 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Routing/Router.php(786): Illuminate\\Routing\\Router->runRouteWithinStack()
#12 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Routing/Router.php(750): Illuminate\\Routing\\Router->runRoute()
#13 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Routing/Router.php(739): Illuminate\\Routing\\Router->dispatchToRoute()
#14 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(201): Illuminate\\Routing\\Router->dispatch()
#15 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(170): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#16 /home/forge/{DOMAIN}/vendor/statamic/cms/src/Http/Middleware/StopImpersonating.php(12): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#17 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Statamic\\Http\\Middleware\\StopImpersonating->handle()
#18 /home/forge/{DOMAIN}/vendor/statamic/cms/src/Http/Middleware/DisableFloc.php(17): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#19 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Statamic\\Http\\Middleware\\DisableFloc->handle()
#20 /home/forge/{DOMAIN}/vendor/statamic/cms/src/Http/Middleware/CheckMultisite.php(15): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#21 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Statamic\\Http\\Middleware\\CheckMultisite->handle()
#22 /home/forge/{DOMAIN}/vendor/statamic/cms/src/Http/Middleware/CheckComposerJsonScripts.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Statamic\\Http\\Middleware\\CheckComposerJsonScripts->handle()
#24 /home/forge/{DOMAIN}/vendor/statamic/cms/src/Http/Middleware/PoweredByHeader.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Statamic\\Http\\Middleware\\PoweredByHeader->handle()
#26 /home/forge/{DOMAIN}/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/FlushEventsMiddleware.php(13): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#27 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Sentry\\Laravel\\Http\\FlushEventsMiddleware->handle()
#28 /home/forge/{DOMAIN}/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php(45): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#29 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Sentry\\Laravel\\Http\\SetRequestIpMiddleware->handle()
#30 /home/forge/{DOMAIN}/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php(31): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#31 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Sentry\\Laravel\\Http\\SetRequestMiddleware->handle()
#32 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#33 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#34 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#35 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#36 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#37 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#38 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Http\\Middleware\\ValidatePostSize->handle()
#40 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(110): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#42 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(62): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#43 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Http\\Middleware\\HandleCors->handle()
#44 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(58): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#45 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#46 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#47 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle()
#48 /home/forge/{DOMAIN}/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Middleware.php(79): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#49 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Sentry\\Laravel\\Tracing\\Middleware->handle()
#50 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(127): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Pipeline\\Pipeline->then()
#52 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(145): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#53 /home/forge/{DOMAIN}/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1220): Illuminate\\Foundation\\Http\\Kernel->handle()
#54 /home/forge/{DOMAIN}/public/index.php(17): Illuminate\\Foundation\\Application->handleRequest()

@duncanmcclean
Copy link
Member

Thanks!

Can you also provide the contents of your config/statamic/api.php config file?

@CedsTrash
Copy link
Author

CedsTrash commented Feb 24, 2025

Here you go:

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | API
    |--------------------------------------------------------------------------
    |
    | Whether the API should be enabled, and through what route. You
    | can enable or disable the whole API, and expose individual
    | resources per environment, depending on your site needs.
    |
    | https://statamic.dev/content-api#enable-the-api
    |
    */

    'enabled' => env('STATAMIC_API_ENABLED', false),

    'resources' => [
        'collections' => [
            'pages' => [
                'allowed_filters' => ['site', 'url', 'status'],
            ],
            'news_article' => [
                'allowed_filters' => ['site', 'url', 'status'],
            ]
        ],
        'navs' => false,
        'taxonomies' => false,
        'assets' => false,
        'globals' => false,
        'forms' => true,
        'users' => false,
    ],

    'route' => env('STATAMIC_API_ROUTE', 'api'),

    /*
    |--------------------------------------------------------------------------
    | Middleware & Authentication
    |--------------------------------------------------------------------------
    |
    | Define the middleware / middleware group that will be applied to the
    | API route group. If you want to externally expose this API, here
    | you can configure a middleware based authentication layer.
    |
    */

    'middleware' => env('STATAMIC_API_MIDDLEWARE', 'api'),

    /*
    |--------------------------------------------------------------------------
    | Pagination
    |--------------------------------------------------------------------------
    |
    | The numbers of items to show on each paginated page.
    |
    */

    'pagination_size' => 50,

    /*
    |--------------------------------------------------------------------------
    | Caching
    |--------------------------------------------------------------------------
    |
    | By default, Statamic will cache each endpoint until the specified
    | expiry, or until content is changed. See the documentation for
    | more details on how to customize your cache implementation.
    |
    | https://statamic.dev/content-api#caching
    |
    */

    'cache' => [
        'class' => \App\Cachers\CustomApiCacher::class,
        'expiry' => env('STATAMIC_API_CACHE_TTL', 0),
    ],

    /*
    |--------------------------------------------------------------------------
    | Exclude Keys
    |--------------------------------------------------------------------------
    |
    | Here you may provide an array of keys to be excluded from API responses.
    | For example, you may want to hide things like edit_url, api_url, etc.
    |
    */

    'excluded_keys' => [
        //
    ],

];

And this is CustomApiCacher.php:

<?php

namespace App\Cachers;

use Illuminate\Support\Facades\Cache;
use Statamic\API\Cachers\DefaultCacher;
use Illuminate\Http\Request;

class CustomApiCacher extends DefaultCacher
{
    /**
     * {@inheritdoc}
     */
    public function get(Request $request)
    {
        if ($request->has('filter')) {
            $filters = $request->get('filter');

            if (isset($filters['url']) && $filters['url'] !== '') {
                $urlsToNeverCache = ['/careers', '/fr/emplois'];

                if (in_array($filters['url'], $urlsToNeverCache)) {
                    return;
                }
            }
        }

        return Cache::get($this->getCacheKey($request));
    }
}

@macaws
Copy link

macaws commented Feb 24, 2025

We're getting this too @duncanmcclean - route included in this screenshot!

Image

@duncanmcclean duncanmcclean changed the title Carbon TypeError (Carbon\Carbon::rawAddUnit(): Argument #3 ($value) must be of type int|float, string given) after upgrading to Statamic 5.48.0 Carbon error from REST API cacher Feb 24, 2025
@jasonvarga
Copy link
Member

In .env, what does the line for STATAMIC_API_CACHE_TTL look like?

@CedsTrash
Copy link
Author

CedsTrash commented Feb 24, 2025

Locally: STATAMIC_API_CACHE_TTL=0
Staging: STATAMIC_API_CACHE_TTL=60

@jbrhel
Copy link

jbrhel commented Feb 24, 2025

Hi @jasonvarga, we are experiencing the same issue when:

  • trying to save column listing prefixes
  • storing form submissions

It seems that this issue has a global impact, and I would guess that it is related to #11348.

@duncanmcclean
Copy link
Member

We're working on a fix.

@jasonvarga
Copy link
Member

@jbrhel Can you open a separate issue for those two? I can't reproduce errors when submitting a form, or saving column preferences.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants