如果我有这样的目录结构:
/
/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”。
有什么建议吗? :)
谢谢, 约什
答案 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/