Created on 26 December 2023, 6 months ago
Updated 29 May 2024, 25 days ago

Problem/Motivation

I'm trying to export and import from one site to another, but run into an Ajax HTTP error when importing:

Error:
Er is een AJAX HTTP fout opgetreden.
HTTP-resultaatcode: 500
Debugging information follows.
Path: /batch?id=14&op=do_nojs&op=do
Statustekst: error
Antwoordtekst: The website encountered an unexpected error. Try again later.

Console:
Failed to load resource: the server responded with a status of 500 ()

I tried single items and multiple, but always get this error. Am I doing something wroing ?

Steps to reproduce

Proposed resolution

Remaining tasks

User interface changes

API changes

Data model changes

πŸ’¬ Support request
Status

Postponed: needs info

Version

1.4

Component

Miscellaneous

Created by

πŸ‡§πŸ‡ͺBelgium shaesen Mechelen

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

  • Issue created by @shaesen
  • Status changed to Postponed: needs info 6 months ago
  • πŸ‡ΊπŸ‡¦Ukraine nginex

    Could you please check logs (enable dblog)?

  • πŸ‡ΊπŸ‡ΈUnited States davedg629

    I'm getting this same error, but only in the Test (staging) and Live environments of a Pantheon hosted site. Here's the full output from the error log:

    Message:

    Drupal\Core\File\Exception\FileNotExistsException: File 'temporary://import/zip/794c2c1d-c6ff-4e00-b3ce-e26f06b925a3/assets/athletics_images/5.2_planning_0.jpg' could not be copied because it does not exist. in Drupal\Core\File\FileSystem->prepareDestination() (line 462 of /code/web/core/lib/Drupal/Core/File/FileSystem.php).

    Backtrace:

    #0 /code/web/core/lib/Drupal/Core/File/FileSystem.php(382): Drupal\Core\File\FileSystem->prepareDestination('temporary://imp...', 'public://athlet...', 1)
    #1 /code/web/modules/contrib/single_content_sync/src/ContentImporter.php(438): Drupal\Core\File\FileSystem->move('temporary://imp...', 'public://athlet...', 1)
    #2 /code/web/modules/contrib/single_content_sync/src/ContentBatchImporter.php(31): Drupal\single_content_sync\ContentImporter->importAssets('temporary://imp...', 'assets/athletic...')
    #3 /code/web/core/includes/batch.inc(296): Drupal\single_content_sync\ContentBatchImporter::batchImportAssets('temporary://imp...', 'assets/athletic...', Array)
    #4 /code/web/core/includes/batch.inc(138): _batch_process()
    #5 /code/web/core/includes/batch.inc(94): _batch_do()
    #6 /code/web/core/modules/system/src/Controller/BatchController.php(52): _batch_page(Object(Symfony\Component\HttpFoundation\Request))
    #7 [internal function]: Drupal\system\Controller\BatchController->batchPage(Object(Symfony\Component\HttpFoundation\Request))
    #8 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array)
    #9 /code/web/core/lib/Drupal/Core/Render/Renderer.php(627): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
    #10 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure))
    #11 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array)
    #12 /code/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
    #13 /code/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
    #14 /code/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #15 /code/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #16 /code/web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #17 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\ContentLength->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #18 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #19 /code/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #20 /code/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #21 /code/web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #22 /code/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #23 /code/web/core/lib/Drupal/Core/DrupalKernel.php(704): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #24 /code/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
    #25 {main}

  • πŸ‡ΊπŸ‡¦Ukraine nginex

    Could you please ensure that temporary folder is properly configured on stage and live? Do you use external file storage?

  • πŸ‡ΊπŸ‡ΈUnited States davedg629

    Ok, so I believe the issue is explained in Pantheon's doc here: https://docs.pantheon.io/symlinks-assumed-write-access

    Essentially, the module is trying to write files to directories outside of the standard Drupal files directory (sites/default/files). For Pantheon hosted sites, Drupal does not have write access to any directories except sites/default/files.

    Would it be possible to change the directories this module writes files to so any files are written to a directory within sites/default/files?

  • πŸ‡ΊπŸ‡¦Ukraine nginex

    I'm currently working on a solution where creating files will not be needed.

    It will use StreamedResponse instead of downloading file.

    For now I think I can provide a patch where the file schema can be configured. e.g. temporary, public, private and etc

  • πŸ‡ΊπŸ‡ΈUnited States davedg629

    A patch would be great. Thanks for your responsiveness!

  • Hi all, I'm encountering the same issue on an Acquia hosted site, only on my production environment. I'm not totally sure whether my problem is the same/similar as what's mentioned above about Pantheon sites, but did find this snippet on the following page:

    https://docs.acquia.com/acquia-cloud-platform/manage-apps/files/temporary
    "Drupal modules that write to temporary directories may require additional configuration to function properly in environments with multiple infrastructures, such as production environments for Cloud Platform Enterprise and Cloud Platform Site Factory."

    It then goes on to list modules that are incompatible with Cloud Platform, but Single Content Sync is not mentioned. I'm thinking the patch mentioned above would help me as well.

    Thank you so much for this wonderful module -- my team has been wanting this exact functionality for a while and it's been quite useful already on our non-production environments!

  • πŸ‡ΊπŸ‡ΈUnited States davedg629

    I've done some more research on this and as far as Pantheon hosted sites go, I'm almost positive the issue is described in their documentation here under "Persistent Temporary Path Workaround": https://docs.pantheon.io/guides/filesystem/tmp#persistent-temporary-path...

    That said, I can't get the workaround to work. Here's what I've done:

    1. Created a patch (attached) that allows you to set the root of the temporary directory in settings.php.
    2. Added the following to settings.php to override the temp directory that the module uses: $config['single_content_sync']['temp_root'] = 'private://tmp/';
    3. I've created the directory at sites/default/files/private/tmp. I also created sites/default/files/private/tmp/export/zip and sites/default/files/private/tmp/import/zip.

    When I try to import a .zip file, I get this error: The content file in YAML format could not be found.

    Not sure why this error is happening. Either the override in settings.php is not the correct path or there is something else the module is doing that I don't understand.

    If anyone has any ideas, please let me know. Otherwise I'll be hoping for a new version of the module that doesn't require the creation of files.

Production build 0.69.0 2024