跳转到主要内容
首页

用户帐户菜单

  • 登录

主导航

  • 首页
  • 小公司运营
  • 网站建设
  • 创业杂谈
  • 兼职赚钱
  • 小微企业信息化
  • 手册教程
    • 《大伟哥的Drupal 8建站指南》
    • 《通过JohnChow.Com在网上赚钱》
  • 关于

面包屑

  • 首页
  • Composer: Could not delete web/sites/default/default.settings.php

Composer: Could not delete web/sites/default/default.settings.php

By 大伟哥 | 2020-08-18,周二, 18:42

在使用composer require安装Drupal模块或者主题的时候,有可能会安装失败,Composer报错如下:

Scaffolding files for drupal/core:
Installation failed, reverting ./composer.json to its original content.
  [RuntimeException]
  Could not delete .../web/sites/default/default.settings.php:

因为安全原因,在web/sites/default目录下default.services.yml和default.settings.php这两个文件的默认权限是644,也就是-rw-r--r--,但是它们的上级目录,权限设置却是555(dr-xr-xr-x),Composer的Drupal Scaffold插件没法删除这两个本来就存在的文件,因些造成模块安装失败。

大伟哥在Drupal的官网上找到几篇相关的文档和问题讨论,找到了两个比较简单的解决方法。

第一个方法:修改default文件夹权限为可写

这个方法是在Drupal官方文档 Starting a Site Using Drupal Composer Project Templates 里提到的,就是手动修改default文件夹的权限,给用户加上写权限:

chmod u+w web/sites/default

但是注意,Drupal会自动对default目录进行权限加固(permissions hardening),所以我们需要告诉Drupal在本地开发环境下不要自动重设目录权限。这就需要两步额外操作:

1.启用settings.local.php设置。

打开sites/default/settings.php,找到最后几行启用setttings.local.php的代码,把前面的注释符号删除,变成以下格式:

if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
   include $app_root . '/' . $site_path . '/settings.local.php';
}

2.将/web/sites/example.settings.local.php复制到/web/sites/default/目录下并重命令为settings.local.php,并确认文件里有这样一行代码:

$settings['skip_permissions_hardening'] = TRUE;

这样Composer就可以顺利删除default.services.yml和default.settings.php这两个文件,从而继续运行下去了。

第二种方法:修改composer.json的scaffold配置,忽略这两个文件的复制更新

在Drupal的问题提交帖子Composer scaffolding fails when permissions on default.settings.yml or default.settings.php is not writable里,有人提出反正composer scaffold插件里面不包含Drupal的任何功能还出问题,干脆composer remove drupal/core-composer-scaffold算了。

但是目前看来最稳妥的解决方法还是不删除drupal/core-composer-scaffold,而只是让它忽略对default.services.yml和default.settings.php这两个原有文件的删除和更新,最给出了应变方法。不过帖子主体里面的代码路径有问题(漏了/default/目录),大伟哥实测可行的代码如下:

"drupal-scaffold": {
      "locations": {
        "web-root": "web/"
      },
      "file-mapping": {
        "[web-root]/sites/default/default.services.yml": false,
        "[web-root]/sites/default/default.settings.php": false
      }
    },

总结:大伟哥认为,这两种方法其实都只是应变方案,都可以解决目前的问题。不过第一种更适合本地开发环境,后面一种比较适合用在生产服务器上,你觉得呢?

网站建设
  • 449 阅读
Drupal
Composer

Book traversal links for Composer: Could not delete web/sites/default/default.settings.php

  • ‹ Composer:PHP error: “The zip extension and unzip command are both missing, skipping.”
  • 向上
  • 新安装的Drupal 8默认能实现什么功能? ›

添加新评论

此字段内容将保密,不会被其他人看见。
关于文本格式
  • 不允许使用HTML标签。
CAPTCHA
2 + 6 =
计算出这道简单的算术题并键入答案。例如、1+3,就输入 4。
发布评论前,请通过下面的验证,以免被当作垃圾评论机器人屏蔽。

搜索

手册导航

  • 网站本地测试开发要尽量使用linux环境
  • Ubuntu Server 16.04安装LAMP网络服务器套件
  • 在测试机上配置Apache服务器下的第一个虚拟主机
  • 在测试服务器上安装第一个Drupal网站
  • Drupal 8/9安装及配置中文语言包
  • Ubuntu Server下启用Apache Rewrite模块
  • drupal 8小版本间升级详细说明
  • Drupal 8多站点实现:使用一套Drupal代码运行多个不同网站
  • Drupal 8网站迁移的步骤和注意事项
  • Drupal 8设置信任主机
  • 安装Drupal 8后除了首页外全是not found
  • Drupal 8解决5次输入密码暂时锁定帐号登录
  • 使用Drupal的SMTP模块发送邮件
  • Drupal怎么进行分类和创建栏目?
  • 使用composer安装Drupal及管理依赖(一)
    • 使用www-data用户运行Composer
    • 使用Composer的drupal/recommended-project默认模版下载Drupal核心文件
    • 使用Composer下载和安装Drupal的命令行工具Drush
    • 使用Composer接管以前手动安装的Drupal网站
    • 使用Composer给Drupal打Patch补丁
    • Composer:PHP error: “The zip extension and unzip command are both missing, skipping.”
    • Composer: Could not delete web/sites/default/default.settings.php
  • 新安装的Drupal 8默认能实现什么功能?
  • 给Drupal8/9网站添加基本页面
  • 让Drupal 8/9显示内容最近编辑时间
  • 给Drupal安装后台搜索服务xunsearch
  • Drupal 8/9 让某个字段仅对注册登录用户显示
  • Drupal Commerce 电子商务方案指南

沪ICP备17000093号-1

公安备案沪公网安备 31011402008254号

© 2016-2022 大伟哥博客版权所有