CakePHP: пытается установить приложение в поддомен - PullRequest
2 голосов
/ 21 марта 2011

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

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

Затем это выглядит следующим образом:

subdomains-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 загружен в apache и 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

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

Ответы [ 3 ]

0 голосов
/ 23 марта 2011

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

Попробовав разные вещи, я понял, что проблема в разрешениях веб-сервера. Когда папка app и cake находилась в каталоге 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>

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

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

0 голосов
/ 19 января 2012

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

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

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

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

0 голосов
/ 22 марта 2011

Jose

Оставьте 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 include, если он не может его установить.

...