heroku设置document_root

时间:2011-12-15 15:11:43

标签: php heroku

如果我有这样的目录结构:

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

如何将/webroot/设置为document_root,以便只在myokuapp的网址下提供内容?

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

这样的东西
web: php webroot/

web: sh boot.sh webroot/

web: sh webroot/
<{1>}中的

,但我始终只使用Procfile

当我在根目录中使用“index.php”推送一个repo时,它工作正常,Heroku push rejected, no Cedar-supported app detected只显示一个运行“boot.sh”的Web进程,但即使这样,Procfile也会被忽略和heroku服务“/”而不是“/ webroot”。所以我并没有暗示如何设置我的heroku ps

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 错误的问题(当没有.php文件位于“/”时显然可以通过将Heroku push rejected, no Cedar-supported app detected更改为“/ app / www / webroot”来解决,但那是a)不是可能和b)无法解决使用“/ webroot”作为docroot的问题。为了解决这个问题,我还必须修改“/app/apache/conf/httpd.conf”。

有什么建议吗? :)

谢谢, 约什

3 个答案:

答案 0 :(得分:5)

您需要使用mod_rewrite在Heroku上的“webroot”中提供内容。在.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]

为了解决“未检测到Cedar支持的应用”错误,我刚刚在我的存储库的根目录中创建了一个新的 index.php 文件。这个文件包含什么并不重要,但我添加了一些提醒,以便在我自己的应用程序中记录这些设置细节。

希望有所帮助!

答案 1 :(得分:5)

它实际上归结为创建自定义boot.sh并指向Procfile以在默认情况下运行它。我在github:https://github.com/winglian/Heroku-PHP

上将它们与一个准系统结构放在一起

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

答案 2 :(得分:1)

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