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';
我接到了将两个基于 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';