Using DigitalOcean Spaces or Amazon S3 for file storage in XF 2.1+

Using DigitalOcean Spaces or Amazon S3 for file storage in XF 2.1+

No permission to download
Can you explain briefly whether we should edit any file manually for the XF 2.1 version of add-on or is it all done automatically?
 
Code:
Aws\S3\Exception\S3Exception: Error executing "PutObject" on "https://bucket-name.s3.us-east-2.amazonaws.com/data/avatars/o/0/3.jpg"; AWS HTTP error: Client error: `PUT https://bucket-name.s3.us-east-2.amazonaws.com/data/avatars/o/0/3.jpg` resulted in a `403 Forbidden` response: <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>F5164F (truncated...) AccessDenied (client): Access Denied - <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>Some-Numbers-Here</RequestId><HostId>Some-More-Numbers-Here=</HostId></Error> src/addons/XFAws/_vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php:191


#0 src/addons/XFAws/_vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php(100): Aws\WrappedHttpHandler->parseError(Array, Object(GuzzleHttp\Psr7\Request), Object(Aws\Command), Array)
#1 src/vendor/guzzlehttp/promises/src/Promise.php(203): Aws\WrappedHttpHandler->Aws\{closure}(Array)
#2 src/vendor/guzzlehttp/promises/src/Promise.php(174): GuzzleHttp\Promise\Promise::callHandler(2, Array, Array)
#3 src/vendor/guzzlehttp/promises/src/RejectedPromise.php(40): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}(Array)
#4 src/vendor/guzzlehttp/promises/src/TaskQueue.php(47): GuzzleHttp\Promise\RejectedPromise::GuzzleHttp\Promise\{closure}()
#5 src/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(98): GuzzleHttp\Promise\TaskQueue->run()
#6 src/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(125): GuzzleHttp\Handler\CurlMultiHandler->tick()
#7 src/vendor/guzzlehttp/promises/src/Promise.php(246): GuzzleHttp\Handler\CurlMultiHandler->execute(true)
#8 src/vendor/guzzlehttp/promises/src/Promise.php(223): GuzzleHttp\Promise\Promise->invokeWaitFn()
#9 src/vendor/guzzlehttp/promises/src/Promise.php(267): GuzzleHttp\Promise\Promise->waitIfPending()
#10 src/vendor/guzzlehttp/promises/src/Promise.php(225): GuzzleHttp\Promise\Promise->invokeWaitList()
#11 src/vendor/guzzlehttp/promises/src/Promise.php(267): GuzzleHttp\Promise\Promise->waitIfPending()
#12 src/vendor/guzzlehttp/promises/src/Promise.php(225): GuzzleHttp\Promise\Promise->invokeWaitList()
#13 src/vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\Promise\Promise->waitIfPending()
#14 src/addons/XFAws/_vendor/aws/aws-sdk-php/src/S3/S3ClientTrait.php(34): GuzzleHttp\Promise\Promise->wait()
#15 src/addons/XFAws/_vendor/league/flysystem-aws-s3-v3/src/AwsS3Adapter.php(596): Aws\S3\S3Client->upload('bucket-name', 'data/avatars/o/...', Resource id #11, 'public-read', Array)
#16 src/addons/XFAws/_vendor/league/flysystem-aws-s3-v3/src/AwsS3Adapter.php(380): League\Flysystem\AwsS3v3\AwsS3Adapter->upload('avatars/o/0/3.j...', Resource id #11, Object(League\Flysystem\Config))
#17 src/vendor/league/flysystem/src/Filesystem.php(122): League\Flysystem\AwsS3v3\AwsS3Adapter->writeStream('avatars/o/0/3.j...', Resource id #11, Object(League\Flysystem\Config))
#18 [internal function]: League\Flysystem\Filesystem->putStream('avatars/o/0/3.j...', Resource id #11, Object(League\Flysystem\Config))
#19 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(431): call_user_func_array('parent::putStre...', Array)
#20 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(395): League\Flysystem\EventableFilesystem\EventableFilesystem->callFilesystemMethod('putStream', Array)
#21 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(71): League\Flysystem\EventableFilesystem\EventableFilesystem->delegateMethodCall('putStream', Array)
#22 src/vendor/league/flysystem/src/MountManager.php(613): League\Flysystem\EventableFilesystem\EventableFilesystem->putStream('avatars/o/0/3.j...', Resource id #11, Array)
#23 src/XF/Util/File.php(185): League\Flysystem\MountManager->putStream('avatars/o/0/3.j...', Resource id #11, Array)
#24 src/XF/Service/User/Avatar.php(269): XF\Util\File::copyFileToAbstractedPath('/tmp/phpG4NluK', 'data://avatars/...')
#25 src/XF/Pub/Controller/Account.php(466): XF\Service\User\Avatar->updateAvatar()
#26 src/XF/Mvc/Dispatcher.php(321): XF\Pub\Controller\Account->actionAvatar(Object(XF\Mvc\ParameterBag))
#27 src/XF/Mvc/Dispatcher.php(248): XF\Mvc\Dispatcher->dispatchClass('XF:Account', 'Avatar', Object(XF\Mvc\RouteMatch), Object(ThemeHouse\UIX\XF\Pub\Controller\Account), NULL)
#28 src/XF/Mvc/Dispatcher.php(100): XF\Mvc\Dispatcher->dispatchFromMatch(Object(XF\Mvc\RouteMatch), Object(ThemeHouse\UIX\XF\Pub\Controller\Account), NULL)
#29 src/XF/Mvc/Dispatcher.php(50): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#30 src/XF/App.php(2177): XF\Mvc\Dispatcher->run()
#31 src/XF.php(390): XF\App->run()
#32 index.php(20): XF::runApp('XF\\Pub\\App')
#33 {main}

-------------

Previous GuzzleHttp\Exception\ClientException: Client error: `PUT https://bucket-name.s3.us-east-2.amazonaws.com/data/avatars/o/0/3.jpg` resulted in a `403 Forbidden` response:
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>F5164F (truncated...)
 - src/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113
#0 src/vendor/guzzlehttp/guzzle/src/Middleware.php(66): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response))
#1 src/vendor/guzzlehttp/promises/src/Promise.php(203): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response))
#2 src/vendor/guzzlehttp/promises/src/Promise.php(156): GuzzleHttp\Promise\Promise::callHandler(1, Object(GuzzleHttp\Psr7\Response), Array)
#3 src/vendor/guzzlehttp/promises/src/TaskQueue.php(47): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}()
#4 src/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(98): GuzzleHttp\Promise\TaskQueue->run()
#5 src/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(125): GuzzleHttp\Handler\CurlMultiHandler->tick()
#6 src/vendor/guzzlehttp/promises/src/Promise.php(246): GuzzleHttp\Handler\CurlMultiHandler->execute(true)
#7 src/vendor/guzzlehttp/promises/src/Promise.php(223): GuzzleHttp\Promise\Promise->invokeWaitFn()
#8 src/vendor/guzzlehttp/promises/src/Promise.php(267): GuzzleHttp\Promise\Promise->waitIfPending()
#9 src/vendor/guzzlehttp/promises/src/Promise.php(225): GuzzleHttp\Promise\Promise->invokeWaitList()
#10 src/vendor/guzzlehttp/promises/src/Promise.php(267): GuzzleHttp\Promise\Promise->waitIfPending()
#11 src/vendor/guzzlehttp/promises/src/Promise.php(225): GuzzleHttp\Promise\Promise->invokeWaitList()
#12 src/vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\Promise\Promise->waitIfPending()
#13 src/addons/XFAws/_vendor/aws/aws-sdk-php/src/S3/S3ClientTrait.php(34): GuzzleHttp\Promise\Promise->wait()
#14 src/addons/XFAws/_vendor/league/flysystem-aws-s3-v3/src/AwsS3Adapter.php(596): Aws\S3\S3Client->upload('bucket-name', 'data/avatars/o/...', Resource id #11, 'public-read', Array)
#15 src/addons/XFAws/_vendor/league/flysystem-aws-s3-v3/src/AwsS3Adapter.php(380): League\Flysystem\AwsS3v3\AwsS3Adapter->upload('avatars/o/0/3.j...', Resource id #11, Object(League\Flysystem\Config))
#16 src/vendor/league/flysystem/src/Filesystem.php(122): League\Flysystem\AwsS3v3\AwsS3Adapter->writeStream('avatars/o/0/3.j...', Resource id #11, Object(League\Flysystem\Config))
#17 [internal function]: League\Flysystem\Filesystem->putStream('avatars/o/0/3.j...', Resource id #11, Object(League\Flysystem\Config))
#18 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(431): call_user_func_array('parent::putStre...', Array)
#19 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(395): League\Flysystem\EventableFilesystem\EventableFilesystem->callFilesystemMethod('putStream', Array)
#20 src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php(71): League\Flysystem\EventableFilesystem\EventableFilesystem->delegateMethodCall('putStream', Array)
#21 src/vendor/league/flysystem/src/MountManager.php(613): League\Flysystem\EventableFilesystem\EventableFilesystem->putStream('avatars/o/0/3.j...', Resource id #11, Array)
#22 src/XF/Util/File.php(185): League\Flysystem\MountManager->putStream('avatars/o/0/3.j...', Resource id #11, Array)
#23 src/XF/Service/User/Avatar.php(269): XF\Util\File::copyFileToAbstractedPath('/tmp/phpG4NluK', 'data://avatars/...')
#24 src/XF/Pub/Controller/Account.php(466): XF\Service\User\Avatar->updateAvatar()
#25 src/XF/Mvc/Dispatcher.php(321): XF\Pub\Controller\Account->actionAvatar(Object(XF\Mvc\ParameterBag))
#26 src/XF/Mvc/Dispatcher.php(248): XF\Mvc\Dispatcher->dispatchClass('XF:Account', 'Avatar', Object(XF\Mvc\RouteMatch), Object(ThemeHouse\UIX\XF\Pub\Controller\Account), NULL)
#27 src/XF/Mvc/Dispatcher.php(100): XF\Mvc\Dispatcher->dispatchFromMatch(Object(XF\Mvc\RouteMatch), Object(ThemeHouse\UIX\XF\Pub\Controller\Account), NULL)
#28 src/XF/Mvc/Dispatcher.php(50): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#29 src/XF/App.php(2177): XF\Mvc\Dispatcher->run()
#30 src/XF.php(390): XF\App->run()
#31 index.php(20): XF::runApp('XF\\Pub\\App')
#32 {main}

I think I've followed everything from the guide but I get this error when trying to upload an avatar.

I haven't touched permissions or anything besides what was mentioned for the IAM user.
 
I have a big wonder, should I use Amazon S3 or Digitalocean for this ? Which is better? (I found my answer)
And can I use this along with Cloudflare?
My outbound average is 300 GB per month (using cloudflare), how much will I cost if I use DO?
Last question, how to cache it with Cloudflare for DO Space?
Can anyone help me
@Chris D can you help me please
 
Last edited:
Code:
Aws\S3\Exception\S3Exception: Error executing "PutObject" on "https://bucket-name.s3.us-east-2.amazonaws.com/data/avatars/o/0/3.jpg"; AWS HTTP error: Client error: [ICODE]PUT https://bucket-name.s3.us-east-2.amazonaws.com/data/avatars/o/0/3.jpg[/ICODE] resulted in a [ICODE]403 Forbidden[/ICODE] response: <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>F5164F (truncated...) AccessDenied (client): Access Denied - <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>Some-Numbers-Here</RequestId><HostId>Some-More-Numbers-Here=</HostId></Error> src/addons/XFAws/_vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php:191

I think I've followed everything from the guide but I get this error when trying to upload an avatar.

I haven't touched permissions or anything besides what was mentioned for the IAM user.
[/QUOTE]

I am getting nearly the same error.  
I tried resolving the issue by adding "AmazonS3FullAccess" policy to my user but same error.   (So I removed that policy).
 
Anyone know whats going on with this!!!!!



Aws\S3\Exception\S3Exception
: Error executing "PutObject" on "http://mehello.s3.us-east-1.amazona...ts/0/57-efc0883104f65080302d5b89d2c726d9.data"; AWS HTTP error: Client error: PUT http://mehello.s3.us-east-1.amazonaws.com/internal_data/attachments/0/57-efc0883104f65080302d5b89d2c726d9.data resulted in a 403 Forbidden response: <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>EC975C (truncated...) AccessDenied (client): Access Denied - <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>EC975C2012290993</RequestId><HostId>YaXKTcmqTUrR9RnlPvG93AB+iFSfGGI36DDxWaJ2Slgme4pO7p0vEt80E5UhbCS6lkvyAIc0ITU=</HostId></Error> in src/addons/XFAws/_vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php at line 191
  1. Aws\WrappedHttpHandler->parseError() in src/addons/XFAws/_vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php at line 100
  2. Aws\WrappedHttpHandler->Aws\{closure}() in src/vendor/guzzlehttp/promises/src/Promise.php at line 203
  3. GuzzleHttp\Promise\Promise::callHandler() in src/vendor/guzzlehttp/promises/src/Promise.php at line 174
  4. GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}() in src/vendor/guzzlehttp/promises/src/RejectedPromise.php at line 40
  5. GuzzleHttp\Promise\RejectedPromise::GuzzleHttp\Promise\{closure}() in src/vendor/guzzlehttp/promises/src/TaskQueue.php at line 47
  6. GuzzleHttp\Promise\TaskQueue->run() in src/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php at line 98
  7. GuzzleHttp\Handler\CurlMultiHandler->tick() in src/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php at line 125
  8. GuzzleHttp\Handler\CurlMultiHandler->execute() in src/vendor/guzzlehttp/promises/src/Promise.php at line 246
  9. GuzzleHttp\Promise\Promise->invokeWaitFn() in src/vendor/guzzlehttp/promises/src/Promise.php at line 223
  10. GuzzleHttp\Promise\Promise->waitIfPending() in src/vendor/guzzlehttp/promises/src/Promise.php at line 267
  11. GuzzleHttp\Promise\Promise->invokeWaitList() in src/vendor/guzzlehttp/promises/src/Promise.php at line 225
  12. GuzzleHttp\Promise\Promise->waitIfPending() in src/vendor/guzzlehttp/promises/src/Promise.php at line 267
  13. GuzzleHttp\Promise\Promise->invokeWaitList() in src/vendor/guzzlehttp/promises/src/Promise.php at line 225
  14. GuzzleHttp\Promise\Promise->waitIfPending() in src/vendor/guzzlehttp/promises/src/Promise.php at line 62
  15. GuzzleHttp\Promise\Promise->wait() in src/addons/XFAws/_vendor/aws/aws-sdk-php/src/S3/S3ClientTrait.php at line 34
  16. Aws\S3\S3Client->upload() in src/addons/XFAws/_vendor/league/flysystem-aws-s3-v3/src/AwsS3Adapter.php at line 596
  17. League\Flysystem\AwsS3v3\AwsS3Adapter->upload() in src/addons/XFAws/_vendor/league/flysystem-aws-s3-v3/src/AwsS3Adapter.php at line 380
  18. League\Flysystem\AwsS3v3\AwsS3Adapter->writeStream() in src/vendor/league/flysystem/src/Filesystem.php at line 122
  19. League\Flysystem\Filesystem->putStream()
  20. call_user_func_array() in src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php at line 431
  21. League\Flysystem\EventableFilesystem\EventableFilesystem->callFilesystemMethod() in src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php at line 395
  22. League\Flysystem\EventableFilesystem\EventableFilesystem->delegateMethodCall() in src/vendor/league/flysystem-eventable-filesystem/src/EventableFilesystem.php at line 71
  23. League\Flysystem\EventableFilesystem\EventableFilesystem->putStream() in src/vendor/league/flysystem/src/MountManager.php at line 613
  24. League\Flysystem\MountManager->putStream() in src/XF/Util/File.php at line 185
  25. XF\Util\File::copyFileToAbstractedPath() in src/XF/Service/Attachment/Preparer.php at line 82
  26. XF\Service\Attachment\Preparer->insertDataFromFile() in src/XF/Service/Attachment/Preparer.php at line 23
  27. XF\Service\Attachment\Preparer->insertAttachment() in src/XF/Attachment/Manipulator.php at line 170
  28. XF\Attachment\Manipulator->insertAttachmentFromUpload() in src/XF/Pub/Controller/Attachment.php at line 88
  29. XF\Pub\Controller\Attachment->actionUpload() in src/XF/Mvc/Dispatcher.php at line 321
  30. XF\Mvc\Dispatcher->dispatchClass() in src/XF/Mvc/Dispatcher.php at line 248
  31. XF\Mvc\Dispatcher->dispatchFromMatch() in src/XF/Mvc/Dispatcher.php at line 100
  32. XF\Mvc\Dispatcher->dispatchLoop() in src/XF/Mvc/Dispatcher.php at line 50
  33. XF\Mvc\Dispatcher->run() in src/XF/App.php at line 2178
  34. XF\App->run() in src/XF.php at line 390
  35. XF::runApp() in index.php at line 20
 
The access key/secret for the IAM user you setup is either incorrect, or the IAM user doesn't have access to write to that S3 bucket
 
I was able to "resolve" the issue for myself and my "fix" worked for @lookforthat as well. @M@rc I would bet my "fix" will work for you or anyone that is getting "403 Forbidden"
Here is what resolved it for me and @lookforthat:
  • In Amazon S3 Management console click on the bucket name and then click on the Permissions tab.
    Click on "Edit" and then uncheck" "Block Public Access" then click Save
  • Go back to your forum and change your avatar and click "Okay" the new avatar will be saved to the Amazon S3 bucket without error.
I tried modifying all access levels in the S3 Service (List, Read, Write, and Permissions management) and the only solution that worked was disabling "Block public access".

I am posting this in hopes of getting some confirmation from any Xenforo developers that this is expected behavior (possibly Amazon changed something and added the block public access for buckets AFTER the original guide was posted). I am theorizing as I am not an Amazon S3 expert.

I am also hoping someone who is more of an Amazon S3 expert can chime in with some suggestions on recommendations to secure an S3 bucket that is open to public access. I messed around and tried the following:
PHP:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ReplicateObject",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::BUCKETNAME",
                "arn:aws:s3:::BUCKETNAME/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "PUBLIC_IP_ADDRESS_OF_XENFORO_SERVER"
                }
            }
        }
    ]
}

But That doesn't seem to be working as expected. The S3 bucket is still open to public. Do I need to add an IP Source to block?
Any help is appreciated and I hope I am not leading people the wrong direction enabling public access on their S3 buckets but it was the ONLY thing that worked for me.
 
Finally got this working in its entirety with the help of unruly1 and others. This is a great resource considering the bulk of running a forum is ensuring there is enough storage space, an having a cost-effective way of offloading images. However, the problem using this add-on is when you delete an image off the forum it remains in the S3 bucket... This essentially means you are paying for images that are no longer utilized on the forum. Not Good! Penny Wise… Dollar Foolish.
 
Last edited:
Finally got this working in its entirety with the help of unruly1 and others. This is a great resource considering the bulk of running a forum is ensuring there is enough storage space, an having a cost-effective way of offloading images. However, the problem using this add-on is when you delete an image off the forum it remains in the S3 bucket... This essentially means you are paying for images that are no longer utilized on the forum. Not Good! Penny Wise… Dollar Foolish.

Well that sucks... Any solution for this? Does it perform the same way for Digital Ocean Spaces? Anyone know?
 
Finally got this working in its entirety with the help of unruly1 and others. This is a great resource considering the bulk of running a forum is ensuring there is enough storage space, an having a cost-effective way of offloading images. However, the problem using this add-on is when you delete an image off the forum it remains in the S3 bucket... This essentially means you are paying for images that are no longer utilized on the forum. Not Good! Penny Wise… Dollar Foolish.
As I can see, if you want to delete an image from a thread and make it also delete in S3/DO space, it would need more complicated step to do, which.. i think more coding
 
Attachment files are not deleted immediately, whether they are stored locally or remotely.

They are deleted by cron job. For attachments you have just uploaded and deleted the files will remain on the server for up to 24 hours. For older attachments you have just deleted the files will remain on the server for up to 1 hour.
 
Attachment files are not deleted immediately, whether they are stored locally or remotely.

They are deleted by cron job. For attachments you have just uploaded and deleted the files will remain on the server for up to 24 hours. For older attachments you have just deleted the files will remain on the server for up to 1 hour.

I stand corrected... That is Good news!!!! I will test this out. Thanks
 
@Chris D , with regards to existing attachements:
I want to update an XF1.5 with XFMG & XFRM to XF2.1.x When I setup the XF 2.1 instance with DigitalOcean before I upgrade the XF 1.5 forums, will the attachements automaticly be stored in my DO space while this process?
 
I'm struggling to find the user in my list after creating the JSON thing. I go back to the users, and I only have the ones there that I setup for bulk emails. Using the email service too.

I can login and out of the buckets in S3. But can't seem to select the users to get the keys for the config.

What am I doing wrong?

1568329484820.png

Then I have this bit done

1568329712454.webp

Then when I go back to users, just the SMTP are there, no matter how many times I refresh it.
 
This works great for avatars and attachments. Any idea what I would have to change in XF2.1 to get the BB image uploads to go to S3?
 
I found a bug @Chris D
If you Installed the add-on and then configured in config.php, all goes smooth, but then you disable the add-on and then enable it again, bug appears
Anyone notice to this bug? I have deleted and created new Space to test several times, and bug it just keep repeating, so I can assure this is a bug

Error: Class 'League\Flysystem\AwsS3v3\AwsS3Adapter' not found in src/config.php at line 26
  1. XF\App->{closure}()
  2. call_user_func() in src/XF/FsMounts.php at line 17
  3. XF\FsMounts::loadDefaultMounts() in src/XF/App.php at line 1030
  4. XF\App->XF\{closure}() in src/XF/Container.php at line 28
  5. XF\Container->offsetGet() in src/XF/App.php at line 2410
  6. XF\App->fs() in src/XF/Util/File.php at line 193
  7. XF\Util\File::writeToAbstractedPath() in src/XF/Service/Template/Compile.php at line 146
  8. XF\Service\Template\Compile->writeCompiled() in src/XF/Service/Template/Compile.php at line 43
  9. XF\Service\Template\Compile->recompile() in src/XF/Entity/Template.php at line 433
  10. XF\Entity\Template->_postSave() in src/XF/Mvc/Entity/Entity.php at line 1208
  11. XF\Mvc\Entity\Entity->save() in src/XF/Service/Advertising/Writer.php at line 87
  12. XF\Service\Advertising\Writer->write() in src/XF/Repository/Advertising.php at line 70
  13. XF\Repository\Advertising->writeAdsTemplate() in src/XF/AddOn/DataType/AdvertisingPosition.php at line 100
  14. XF\AddOn\DataType\AdvertisingPosition->XF\AddOn\DataType\{closure}() in src/XF.php at line 290
  15. XF::triggerRunOnce() in src/XF/Mvc/Dispatcher.php at line 143
  16. XF\Mvc\Dispatcher->dispatchLoop() in src/XF/Mvc/Dispatcher.php at line 50
  17. XF\Mvc\Dispatcher->run() in src/XF/App.php at line 2178
  18. XF\App->run() in src/XF.php at line 390
  19. XF::runApp() in admin.php at line 13
 
Last edited:
Top Bottom