Javascript & CSS Drupal 8 迁移后未加载

Javascript & CSS not loading after Drupal 8 migration

我接到了将两个基于 Drupal 的网站迁移到新服务器的任务,这并不是因为我是 Drupal 专家,而是因为我是办公室里唯一拥有 PHP 编程技能的人。一个是 Drupal 7 站点,另一个是 Drupal 8。这些都是作为 DevDesktop 存档和 SQL 转储提供给我的。 Drupal 7 站点非常简单——将 docroot 的内容复制到新服务器,创建并填充一个新的 MySQL 数据库,并编辑默认站点设置文件以指向新的数据库。所以 Drupal 7 网站工作正常。对 Drupal 8 站点做同样的事情,主要问题似乎是它不会加载任何 CSS 或 Javascript。

在 Javascript 控制台中,它让我有点不适应,因为它说 CSS 的 mime 类型不正确,但进一步检查是因为 [=28= 的路径] 返回 404。

使问题更加复杂的是 Antibot,由于 Javascript 没有加载,虽然我有管理员用户的用户名和密码,但我无法登录,因为 Antibot 一直让我返回主页,告诉我我启用 Javascript。我已经编辑 settings.php 以启用 /core/rebuild.php 并尝试过,但似乎没有任何区别。我还手动截断了 'cache_...' 表,但这似乎也不起作用。请注意,我无法在新服务器上访问 SSH,因此无法使用 drush。

Refused to apply style from '[]' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.
Failed to load resource: the server responded with a status of 404 (Not Found)

在我的非专家眼中,Drupal 以某种方式配置为从虚拟目录 /css/ 和 /js/ 提供 CSS 和 JS 的优化版本。 ,尽管这些路径实际上并不存在于服务器上。我检查了 .htaccess 文件,但除了一些巧妙的东西可以将 gzip 版本提供给支持 gzip 的浏览器之外,在其中看不到任何可以让服务器找到正确文件的东西。也许如果有人可以解释 Drupal 如何将请求路由到 /css/ 或 /js/ 到正确的文件,那将有助于我进一步理解。

最终我认为这个问题是因为Drupal 8 想要提供优化的文件,但是缓存被搞砸了,Antibot 不让我进入管理关闭聚合。

我可以完全访问服务器文件和数据库,但不能 drush。除了通过管理菜单之外,还有其他方法可以关闭 CSS 和 JS 聚合吗?

在这种情况下,您可以禁用聚合:

  • 通过编辑 settings.php 或 settings.local.php :

    /**
     * Disable CSS and JS aggregation.
     */
    $config['system.performance']['css']['preprocess'] = FALSE;
    $config['system.performance']['js']['preprocess'] = FALSE;
    
  • 或通过 sql,但您必须从配置 table 解码和反序列化 blob 数据以进行更改,然后进行相反的过程:

    # Query :
    SELECT name, CONVERT (`data` USING utf8) FROM config WHERE `name`='system.performance';
    
    # Unserialize query output and edit data locally
    $config = unserialize($output);
    $data['css']['preprocess'] = FALSE;
    $data['js']['preprocess'] = FALSE;
    
    # Then serialize data and write it back into the config table 
    # (original encoding is probably `LONGBLOB` but it may differ depending on the backend).
    

一旦您可以通过 ssh 进入服务器,您将需要在 sites/default/files/ 下重置权限和所有权,然后再次启用聚合:

mkdir -p sites/default/files/{css,js}
chown -R apache:apache sites/default/files/
chmod -R 0755 sites/default/files/

您可能还想检查 public 文件路径设置(在 settings.php 中)是否根据这些资源的实际位置正确设置:

$settings['file_public_path'] = 'sites/default/files';