如何让Drupal 8访问Web根目录之外的配置文件?

时间:2016-08-09 14:15:11

标签: php apache drupal drupal-8

我刚跳进了Drupal 8,我在项目中启用基于文件的配置时遇到了麻烦。我正在使用这些说明:https://www.drupal.org/node/2416555

我已按照所有步骤操作,但每次尝试更改配置时,都会出现以下错误:

Drupal\Core\Config\StorageException: Failed to create config directory 
./../config/active in Drupal\Core\Config\FileStorage->ensureStorage() 
(line 72 of /Users/bbalan/Sites/d8project/web/core/lib/Drupal/Core/Config/FileStorage.php).

我认为我的settings.php中的路径有问题。说明可能出于安全原因使用Web根目录之外的路径。这就是我所拥有的:

$config_directories = array(
    CONFIG_ACTIVE_DIRECTORY  => './../config/active',
    CONFIG_STAGING_DIRECTORY => './../config/staging',
    CONFIG_SYNC_DIRECTORY    => './../config/sync',
);

我将所有配置目录权限设置为777,并且已经手动创建了活动/暂存/同步目录(也使用777)。以下是我的项目文件夹的内容:

-rw-r--r--   1 bbalan  staff   18046  8 Aug 15:22 LICENSE
-rw-r--r--   1 bbalan  staff    4787  8 Aug 15:22 README.md
-rw-r--r--   1 bbalan  staff    2299  8 Aug 17:35 composer.json
-rw-r--r--   1 bbalan  staff  206302  8 Aug 17:35 composer.lock
drwxrwxrwx   6 bbalan  staff     204  8 Aug 15:36 config
drwxr-xr-x   4 bbalan  staff     136  8 Aug 15:22 drush
-rw-r--r--   1 bbalan  staff     481  8 Aug 15:22 phpunit.xml.dist
drwxr-xr-x   3 bbalan  staff     102  8 Aug 15:22 scripts
drwxr-xr-x  42 bbalan  staff    1428  8 Aug 17:36 vendor
drwxr-xr-x  19 bbalan  staff     646  8 Aug 17:23 web

这是使用Composer根据https://github.com/drupal-composer/drupal-project的说明构建的Drupal 8.1.8安装。所有Drupal站点文件都在/web中。这是我的httpd-vhosts.conf:

<VirtualHost *:80>
    ServerName drupal-8.local
    ServerAlias drupal-8.local
    DocumentRoot /Users/bbalan/Sites/d8project/web/
    <Directory /Users/bbalan/Sites/d8project/web/>
        Options FollowSymLinks
        AllowOverride All
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

有什么想法吗?如果我将/config目录移动到Web根目录中的某个位置(例如,/sites/default/files/config),一切都有效,但这似乎不安全并且与指令相反。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我不建议将配置目录设置为777. 755是一种更好的方法,因为它允许所有者和组成员进行读写。如果要允许组成员执行,也可以尝试775。此外,请确保Web服务器用户是该组的一部分。 Apache通常使用www-data。我还建议将配置目录移动到sites/default/sync

$config_directories = array(
    CONFIG_ACTIVE_DIRECTORY  => 'sites/default/config/active',
    CONFIG_STAGING_DIRECTORY => 'sites/default/config/staging',
    CONFIG_SYNC_DIRECTORY    => 'sites/default/config/sync',
);

确保这些目录存在且Web服务器是组staff的一部分。

我要检查的另一件事是Drupal的状态,看看它在那里告诉你什么。