对于8.4.x> 8.4.y的修补程序版本,以下是可以的,但对于8.4.x> 8.5.x的次要发行版,以下条件不可以。跳转至下面的UPDATE 3,以获取次要版本更新的“答案”。
1-备份您已修改的Drupal随附的所有文件,例如.htaccess,robots.txt等(其中2个是最常更改的)。
2- [被告知删除锁定文件是错误的,请参阅下面的UPDATE] 删除composer.lock文件(在您网站的顶级文件夹中)。这将在步骤5中重新创建。
3-检查您的composer.json (在您网站的顶级文件夹中),并确保“ drupal:core”在require部分而不是replace部分中,例如
"require": {
"drupal/core": "^8.4"
},
不
"replace": {
"drupal/core": "^8.4"
},
如果“ drupal / core”在替换部分中,请将其移至require部分并删除替换部分。如果替换部分中还有其他条目,只需删除“ drupal / core”而不是整个替换部分-但我认为“ drupal / core”通常是唯一的选择。
将您要更新的版本放在“ drupal / core”中,例如:
“ drupal / core”:“ ^ 8.5”-将更新为8.5的最新版本。“ drupal / core”:“ 8.4.6”-将更新至版本8.4.6。
5-运行此命令(在您站点的顶级文件夹中):
composer update drupal/core --with-dependencies
6-如果没有错误,请照常执行,运行更新并清除缓存:
drush updatedb
drush cr
或者,如果不使用drush,请转到/update.php以运行更新,然后转到admin / config / development / performance,然后点击“清除所有缓存”按钮。
7-如果您已在第一步中备份了文件(.htaccess,robots.txt),请放回它们。但是请检查Drupal是否对这些文件进行了更新并将这些更改添加到您的文件中。
完成
如果步骤5中的作曲者更新存在错误,通常是由于vendor文件夹中内容的版本存在问题。
这是处理此类问题的好文章:https : //www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update并阅读Jeff在Drupal和Composer上的其他2篇文章以获得关于此的更多知识。
Twitter上的2个人告诉我,不应删除composer.lock(上面的步骤2)。该composer update drupal/core --with-dependencies
命令仍然会重新创建锁定文件。
在测试此方法时,我发现它适用于8.4.3> 8.4.6(例如),但出现8.4.6> 8.5.x错误。当我弄清楚时会报告。
错误示例:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- symfony/yaml 3.4.x-dev conflicts with symfony/console[v3.2.8].
- symfony/yaml 3.4.x-dev conflicts with symfony/console[v3.2.8].
- symfony/yaml 3.4.x-dev conflicts with symfony/console[v3.2.8].
- drupal/core 8.5.0 requires symfony/yaml ~3.4.5 -> satisfiable by symfony/yaml[3.4.x-dev].
- Installation request for drupal/core 8.5.0 -> satisfiable by drupal/core[8.5.0].
- Installation request for symfony/console (locked at v3.2.8, required as ~3.2.8) -> satisfiable by symfony/console[v3.2.8].
杰夫·吉林(Jeff Geerling)的这篇文章解决了类似的问题,但到目前为止对我来说没有运气:https : //www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update
因此,对于8.4.x> 8.5.x来说,似乎唯一适合我的是很多人似乎都在使用的“核选项”,该选项可以运行composer update
。
我想只要您确定composer.json中的模块版本就可以。也许应该将其锁定为当前版本。例如:
"drupal/address": "1.3"
而不是:
"drupal/address": "^1.3"
但是正确的答案是吗?
确定似乎无处不在的答案是做“核选项”:
A.删除/vendor
文件夹。
B.运行composer update
并只需更新您的模块以及核心。或者,composer.json
如果您不想更新模块版本,请锁定它们。
Drupal Slack上的一位人士说:“ Composer的全部理念是,您应该始终尽可能频繁地更新软件包”。打包包括我认为的模块。所以我猜这是有道理的。
一旦我从8.4.6升级到8.5.0,就可以从8.5.0升级到8.5.1了,composer update drupal/core --with-dependencies
就像从8.4.3升级到8.4.6一样。
我开始得出结论,“答案”是删除供应商文件夹和composer.lock文件,然后使用composer update
就可以了,并且应该简单地确保composer.json文件中依赖项的版本号是您想要的。管理要保留或允许在其中更新的模块版本并不重要composer.json
。
例如:
"drupal/admin_toolbar": "1.18",
表示坚持1.18
"drupal/admin_toolbar": "^1.18",
表示继续进行更新,但要在1.x(而不是2.x)之内
这是通过对此帖子的评论(Redneck将军)来支持的:https
: //www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update “我做过的其中一件事情我在支持部门工作时发现,锁定模块和内核的版本是一个好主意,因此您可以在需要时进行热启动,因为有时某些插件甚至不希望其行为正常。”
顺便说一句,composer.lock文件没有帮助,composer update
因为它被吹走了(与composer install
读取他的锁定文件相反):
运行composer install
将:
- 检查是否
composer.lock
存在
- 如果不是,请执行
composer update
创建一个
- 如果
composer.lock
存在,请从锁定文件中安装指定的版本
运行composer update
将:
- 校验
composer.json
- 根据您的版本规格确定要安装的最新版本
- 安装最新版本
- 更新
composer.lock
以反映安装的最新版本
参考:https : //www.engineyard.com/blog/composer-its-all-about-the-lock-file
我看到上面提到了这一点:https : //github.com/drupal-composer/drupal-project。我已经用过了,这很好,但这不是将Composer与Drupal一起使用的必要条件。就像名称中的“声音”一样,这令人困惑。当我刚开始使用Drupal 8时,我认为这是必需的,因此用它构建了我的第一个D8站点,并认为这是最佳实践。
Drupal的“版本”将docroot放在/ web文件夹中,而不是在项目的顶部文件夹中。与正常的Drupal相比,.gitignore还添加了很多东西:
/drush/contrib/
/vendor/
/web/core/
/web/modules/contrib/
/web/themes/contrib/
/web/profiles/contrib/
/web/libraries/
因此,此版本的Drupal实际上更适合于使用持续集成,使用composer安装在每个部署上进行新版Drupal构建的站点。如果您使用更常规的方法进行部署,则显然必须将以上所有内容提交到git repo中,否则它将无法部署到您的服务器[1],并且运行Drupal都需要这些内容。
[1]如果git与您的部署有关-如果您使用SFTP进行部署,请忽略此操作。