2011-12-15 49 views
4

如果我有这样的目录结构:的Heroku设置的document_root

/ 
/libraries/ 
/other-nonpublic-stuff/ 
/webroot/ 

我如何可以设置/webroot/为DOCUMENT_ROOT使得只有它的内容是我herokuapp的URL下服务?

我认为Procfile可能是实现这一目标的方法,但它没有真正的记录。 已经尝试过的事情一样

web: php webroot/ 

web: sh boot.sh webroot/ 

web: sh webroot/ 
Procfile

,但我总是只结束了Heroku push rejected, no Cedar-supported app detected

当我推了回购根目录i中的“index.php” t工作的很好,一个heroku ps只显示了一个运行“boot.sh”的web进程,但即使这样Procfile显然被忽略,而且heroku提供“/”而不是“/ webroot”。所以,不是真的在暗示我怎么可能设置我Procfile

Process State  Command  
------- --------- ---------- 
web.1 up for 2h sh boot.sh 

我通过heroku run bash登录到我的“实例”的控制台,并做了cat boot.sh。它包含了这一点:

sed -i 's/Listen 80/Listen '$PORT'/' /app/apache/conf/httpd.conf 
for var in `env|cut -f1 -d=`; do 
    echo "PassEnv $var" >> /app/apache/conf/httpd.conf; 
done 
touch /app/apache/logs/error_log 
touch /app/apache/logs/access_log 
tail -F /app/apache/logs/error_log & 
tail -F /app/apache/logs/access_log & 
export LD_LIBRARY_PATH=/app/php/ext 
export PHP_INI_SCAN_DIR=/app/www 
echo "Launching apache" 
exec /app/apache/bin/httpd -DNO_DETACH 

所以与Heroku push rejected, no Cedar-supported app detected错误的问题(没有PHP文件是“/”是通过改变PHP_INI_SCAN_DIR为“/程序/网络/ Webroot公司”显然可以解决的,但多数民众赞成一)不可能的和b)不会解决使用“/ webroot”作为文档根的问题。为了解决这个问题,我还必须修改“/app/apache/conf/httpd.conf”。

有什么建议吗? :)

感谢, 乔希

+0

我以为Heroku不适用于PHP。我错了吗? – 2011-12-15 15:16:51

+3

他们在雪松堆叠上默默支持php。因为他们正在与Facebook合作。我想我可能会用Procfile来做到这一点,但这种用法并没有记录在php中。 – Josh 2011-12-15 15:20:41

回答

5

你需要使用mod_rewrite提供内容出在Heroku上“根目录”中。尝试在你的.htaccess文件如下:

RewriteEngine On 

RewriteRule ^\.htaccess$ - [F] 

RewriteCond %{REQUEST_URI} ="" 
RewriteRule ^.*$ /webroot/index.php [NC,L] 

RewriteCond %{REQUEST_URI} !^/webroot/.*$ 
RewriteRule ^(.*)$ /webroot/$1 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^.*$ - [NC,L] 

RewriteRule ^public/.*$ /webroot/index.php [NC,L] 

为了解决“无雪松支持的应用程序检测”的错误,我只是创造了我的仓库根新的index.php文件。这个文件包含的内容并不重要,但我添加了一些提醒,以在我自己的应用中记录这些设置详细信息。

希望有帮助!

5

它实际上归结为创建一个自定义的boot.sh,并指定Procfile在默认情况下运行。我已经把它放在github上的一个准系统结构中:https://github.com/winglian/Heroku-PHP

它包含一个使用自己的conf文件的钩子,所以随时随地使用它并让我知道!

1
web: vendor/bin/heroku-php-apache2 webroot/