CakePHP: попытка установить приложение на поддомен

Я пытаюсь установить приложение CakePHP на субдомен своего сервера. Я хочу выполнить расширенную установку и отделить библиотеки ядра и приложений от каталога webroot.

Я помещаю весь проект в папку в домашнем каталоге и перемещаю содержимое каталога webroot в каталог httpdocs поддомена.

Тогда это выглядит так:

поддомены-httpdocs:

drwxrwxrwx 2 root root 4096 Mar 21 08:34 css
-rwxrwxrwx 1 root root 2760 Mar 21 08:34 css.php
-rwxrwxrwx 1 root root  374 Mar 21 08:34 favicon.ico
drwxrwxrwx 2 root root 4096 Mar 21 08:34 files
drwxrwxrwx 2 root root 4096 Mar 21 08:34 img
-rwxrwxrwx 1 root root 2731 Mar 21 08:43 index.php
drwxrwxrwx 2 root root 4096 Mar 21 08:34 js
-rwxrwxrwx 1 root root 3086 Mar 21 08:34 test.php

Я отредактировал файл index.php и изменил константы ROOT и APPDIR, чтобы указать папку для торта и папки приложения (в домашнем каталоге) соответственно. Наконец, я изменил файлы .htaccess (3 файла), добавив параметр RewriteBase, указывающий на каталог приложения (как сказано в поваренной книге http://book.cakephp.org/view/917/Apache-and-mod_rewrite-and-htaccess).

Я проверил, что mod_rewrite загружается в апаче и активен AllowOverride All, но это не работает. Он каждый раз отвечает HTTP 500.

Если я помещу весь проект в каталог httpdocs (включая каталог webroot), он отлично работает.

Можете ли вы помочь мне с этим?


ОБНОВЛЕНИЕ

Я снова проверил, и это работает, если все каталоги находятся в папке httpdocs (каталоги ядра и приложения). Однако они не работают в другом месте.

Он возвращается

Warning: include(cake/bootstrap.php) [function.include]: failed to open stream: No such file or directory in /var/www/vhosts/mydomain.com/subdomains/subscribers/httpdocs/apptest/webroot/index.php on line 83

Warning: include(cake/bootstrap.php) [function.include]: failed to open stream: No such file or directory in /var/www/vhosts/mydomain.com/subdomains/subscribers/httpdocs/apptest/webroot/index.php on line 83

Warning: include() [function.include]: Failed opening 'cake/bootstrap.php' for inclusion (include_path='/home/systemtest:/home/systemtest/app/:.:') in /var/www/vhosts/mydomain.com/subdomains/subscribers/httpdocs/apptest/webroot/index.php on line 83

заранее спасибо


person Jose S    schedule 21.03.2011    source источник
comment
Есть ли у веб-сервера разрешение на доступ к файлам торта и приложения?   -  person Amy Anuszewski    schedule 21.03.2011
comment
Спасибо за ваш ответ, Эми. Вероятно, у него нет разрешений. Как я могу добавить разрешения для веб-сервера? httpd.conf?   -  person Jose S    schedule 22.03.2011


Ответы (3)


Я нашел решение:

Попробовав разные вещи, я понял, что проблема была с разрешениями веб-сервера. Когда папка приложения и торта находилась в каталоге httpdocs, приложение работало отлично, но после перемещения их в другой каталог index.php возвращал HTTP 500, указывающий, что не удалось открыть файлы в основном каталоге торта.

Решение состояло в том, чтобы добавить VirtualHost в файл httpd.include поддомена:

<VirtualHost xx.xx.xx.xxx.xx:80>
        ServerName subdomain.mydomain.com
        Alias /myapp /home/myapp/app/webroot
        DocumentRoot /home/myapp/app/webroot
        <Directory /home/myapp/app/webroot>
                Options FollowSymLinks
                AllowOverride All
        </Directory>
</VirtualHost>

Я думал, что смогу разделить каталоги приложений, тортов и веб-сайтов и управлять установкой с помощью .htaccess без конкретного виртуального хоста apache.

Спасибо Эми и Лео за помощь

person Jose S    schedule 23.03.2011

Это можно сделать по-другому. Существуют некоторые ограничения на то, какие пути к каталогам можно открывать в php. PHP определяет директиву open_basedir, которая, в свою очередь, ограничивает файлы, которые могут быть включены.

На виртуальном хостинге (например, в вашем случае) дерево каталогов по умолчанию включает только ваши каталоги $_SERVER['DOCUMENT_ROOT'] и /tmp, поэтому у вас нет возможности включить ядро ​​торта, если оно находится в другом месте.

Чистое и простое решение состоит в том, чтобы добавить абсолютный путь к каталогу, в котором вы будете хранить ядро ​​торта, в вашем php.ini. После этого вы просто определяете свой CAKE_CORE_INCLUDE_PATH так, чтобы он указывал на каталог, в котором установлено ядро ​​пирога. Таким образом, вы избежите добавления директивы VirtualHost в httpd.conf для каждого создаваемого вами приложения, которое работает на поддомене или даже на самом домене.

Надеюсь, это было полезно.

person Cris Sawfish    schedule 19.01.2012

Хосе

Оставьте ROOT и APPDIR в покое (в вашем /app/index.php) и просто измените CAKE_CORE_INCLUDE_PATH в /app/webroot/index.php.

/**
* The absolute path to the "cake" directory, WITHOUT a trailing DS.
*
*/
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
    define(
        'CAKE_CORE_INCLUDE_PATH', 
        DS . 'usr' . DS .'share' . DS . 'cakephp' . DS . '1.3.6'
    );
}

Это будет читать основные библиотеки из общего источника. Добавьте исходный путь ядра торта в путь включения php, если торт не может его установить.

person Leo    schedule 22.03.2011
comment
Я сделал это и просто работает, если они находятся в каталоге httpdocs. Если я перемещу основной каталог торта в другое место, это не сработает. Как сказала Эми, я думаю, что это проблема с правами доступа к веб-серверу. Вы знаете, как я могу добавить разрешения для apache? - person Jose S; 22.03.2011
comment
Привет Лео, я обновил свой первый пост. Файл index.php в webroot возвращает фатальную ошибку при попытке открыть каталог торта. Похоже на проблему с разрешением. Я пробовал с chown в приложении и основном каталоге - person Jose S; 22.03.2011
comment
Тем не менее, он сказал бы, что в разрешении отказано. Каков путь установки вашего торта? Я поместил свой, например, в /usr/share/cake/1.3.8/. Удалите косую черту из пути включения. - person Leo; 22.03.2011
comment
Каталог Cake находится в /home/systemtest. Я попытался переместить его в /usr/share/systemtest, и снова выдает то же предупреждение. Вы сменили владельца каталога? Я перешел на apache (chown -R apache.apache), но все равно не работает. Если я помещу ядро ​​торта в httpdocs, это сработает - person Jose S; 22.03.2011
comment
значит вы точно переопределили строку CAKE_CORE_INCLUDE_PATH? - person Leo; 23.03.2011