此页面是一个分步指南,用于手动将Composer支持添加到以前未安装Composer的现有站点。如果您从tarball手动安装了Drupal 8站点,或者使用了像drupal / drupal这样的废弃Composer模板,那么这个方法适合您。
目前附带从https://www.drupal.org/download下载的tarball的composer.json文件 不适用于作曲家管理的站点。虽然这可能听起来有点令人困惑,但它允许Drupal使用Composer来管理其依赖关系,而无需管理员手动安装的站点来使用Composer。
如果要从手动管理切换到使用Composer来安装和更新Drupal核心和贡献模块,则必须首先修改站点的composer.json文件。这将在未来发生变化,在Core Initiative的Composer支持中了解更多信息 。
可以指示错误的composer.json文件的典型Composer错误消息是:
Nothing to install or update (even though updates exist)
Installation request for drupal/drupal No version set (parsed as 1.0.0) -> satisfiable by drupal/drupal[No version set (parsed as 1.0.0)].
don't install drupal/core 8.x.x | remove drupal/drupal No version set (parsed as 1.0.0)
Your requirements could not be resolved to an installable set of packages.
有时可以通过在运行之前删除编写器锁定文件和供应商目录(和)来解决Composer模板的问题,但是将现有的Drupal 8站点转换为使用Drupal 8安装指南中建议的Composer模板管理的项目(3.5。使用更新Drupal时,下载和更新文件的编写器将成为更可持续的解决方案。composer.lock
vendor/
composer update
工具gocomposer和composerize drupal尝试自动化将旧站点转换为Composer项目的过程,但即使对于大量站点而言,手动转换也非常简单,并且不需要很多时间。
在流程结束时,您的项目将具有当前推荐的目录结构。Composer配置(,等)和供应商目录将放在您的Web根目录之外。您的原始Web根目录将包含一个名为的新文件夹,实际网站位于该文件夹中。如果您的项目当前使用不同的目录布局,则必须更新Web服务器配置以指向新目录。我们稍后会再次讨论这个问题。composer.json
composer.lock
drush
web/
web/
TL; DR?
- 使用新目录中的当前Composer模板安装新的Drupal站点。
- 将所有自定义主题,模块,文件和设置复制到新项目。(仔细检查目录结构。)
- 将设置传输到新项目。
- 将所有提供的模块添加到新文件并运行。
composer.json
composer install
- 更新数据库并清除缓存()
drush updb;drush cr
- 更新Web服务器配置。
完整的故事
这些说明假定您的现有网站位于目录中,并且您将在其中创建新网站。调整实际目录的路径。/var/www/sites/html/
/var/www/sites/new_html/
1.安装新的Drupal站点
从drupal-composer / drupal-project模板创建一个新的Drupal项目:
cd /var/www/sites
composer create-project drupal-composer/drupal-project:8.x-dev new_html --no-interaction
这将在当前目录中创建目录new_html /,其中包含供应商和web(= web root)目录以及您的文件等。如果您的旧项目没有使用此目录结构,那么您可能希望习惯于能够直接从此目录运行drush和composer,而不仅仅是从web根目录中运行。composer.json
2.将文件复制到新的Composer项目
然后将旧项目目录中的自定义模块,主题和库复制到新项目。确保将文件放在新项目的正确目录中,因为旧文件夹结构可能不同。
正确的路径可以在您的“ installer-paths ”部分找到:composer.json
"extra": {
"composer-exit-on-patch-failure": ...
"patchLevel": {
...
},
"installer-paths": {
"web/core": ["type:drupal-core"],
"web/libraries/{$name}": ["type:drupal-library"],
"web/modules/contrib/{$name}": ["type:drupal-module"],
"web/profiles/contrib/{$name}": ["type:drupal-profile"],
"web/themes/contrib/{$name}": ["type:drupal-theme"],
"drush/Commands/{$name}": ["type:drupal-drush"]
},
"drupal-scaffold": {
...
}
}
在您的旧网站中,可能会找到模块。在新站点中,它们必须放在上面的installer-paths部分中提到的目录中:。/var/www/sites/html/modules/
/var/www/sites/new_html/web/modules/
-
自定义主题转到
/var/www/sites/new_html/web/themes/
-
自定义模块转到
/var/www/sites/new_html/web/modules/custom/
-
图书馆去了
/var/www/sites/new_html/web/libraries/
-
您上传的文件和图片会转到
/var/www/sites/new_html/web/sites/default/files/
仔细检查Web服务器是否具有文件目录的写权限,就像安装新的Drupal站点时一样。如果您想了解有关目录权限的更多信息,请通读。确保文件权限和所有权的安全。
假设您的Web服务器用户是www-data,并且您的ftp服务器用户是vftp。您应该从命令提示符运行类似这样的设置文件和目录权限:
#Set group of the files folder to the webserver user
sudo chown -R vftp:www-data /var/www/sites/new_html/web/sites/default/files
#Allow the webserver user group to edit and access folders in the files directory
sudo find /var/www/sites/new_html/web/sites/default/files -type d -exec chmod u=rwx,g=rwx,o= '{}' \;
#Allow the webserver user group to edit all files in the files directory.
sudo find /var/www/sites/new_html/web/sites/default/files -type f -exec chmod u=rw,g=rw,o= '{}' \;
您的文件目录包含用户上传到旧站点的所有文件,以及包含压缩样式表或缓存树枝模板等临时文件的一些文件夹。如果将这些文件夹与旧站点中的临时文件一起复制到新文件目录中,请确保手动删除它们。这些文件夹是新目录中的php /,js /和css /。/var/www/sites/new_html/web/sites/default/files
3.将设置传输到新项目
将数据库连接信息等从旧的settings.php复制到新项目。基本上这将是和数组,可能是你做的一些自定义设置。只需将两个文件区分开来即可查看需要复制的内容。还要确保指向现有目录。这可能应该在您的Web根目录之外,找到的位置。如果你以另一种方式安装Drupal,这也可能指向目录中的某个文件。$databases['default']['default']
$settings['trusted_host_patterns']
settings.php
$config_directories['sync']
composer.json
sites/default/files/
另外,不要忘记拷贝你的发展设置文件和新项目。settings.local.php
development.services.yml
4.将提供的模块添加到新的Composer配置中
现在,您需要将所有项目的模块添加到新Web根目录中的新composer.json文件中。
在新项目根目录中编辑(例如),并将旧的“require”和“require-dev”部分的包列表复制到新文件中。composer.json
/var/www/sites/new_html
composer.json
composer.json
如果您之前没有使用composer来管理该项目,则必须手动收集所有贡献(非自定义)模块的列表。你可以通过获取你或目录的目录列表来实现这一点(取决于你的设置)。在您将只是前面的每个模块的目录名称。例如,成为。确保你把开发包一样还是在“规定,开发”部分,在这里你应该已经发现。modules/contrib/
modules/
composer.json
drupal/
modules/contrib/devel/
drupal/devel
drupal/devel
drupal/kint
webflo/drupal-core-require-dev
您可以为每个必需的模块运行,而不是手动将模块名称和版本添加到composer.json 。您可以一次性添加所有模块。使用 一个模块添加到的要求-dev的部分文件。composer require drupal/<module name>
composer require drupal/module-name-1 drupal/module-name-2 drupal/module-name-i
composer require --dev drupal/<module name>
composer.json
完成Composer安装
运行composer install
在你的项目目录(例如,)。这将安装您之前添加的所有模块。如果遇到问题,只需删除和供应商目录,然后重试。/var/www/sites/new_html/
composer.json
composer.lock
5.更新数据库并清除缓存
确保通过运行应用所有可用的数据库更新drush updb
。
然后通过drush cr
从项目目录()运行清除Drupal缓存。/var/www/sites/new_html
6.更新Web服务器配置
更新您的Web服务器配置以指向新的Web根目录。在我们的例子中。如果您正在使用某些php-fpm设置,还要确保更新php-fpm设置(例如)以指向新的Web根目录。更新配置后,不要忘记重新加载或重新启动服务。/var/www/sites/new_html/web/
/etc/php/7.2/fpm/pool.d/yoursite.conf
评论