【问题标题】:heroku set document_rootheroku 设置 document_root
【发布时间】:2023-04-07 10:25:01
【问题描述】:

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

/
/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结束

当我在根目录中推送带有“index.php”的存储库时,它工作正常,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 更改为“/app/www/webroot”来解决,但那是a)不可能和b)不会解决使用“/webroot”作为文档根的问题。为了解决这个问题,我还必须修改“/app/apache/conf/httpd.conf”。

有什么建议吗? :)

谢谢, 乔什

【问题讨论】:

  • 我认为 Heroku 不适用于 php。我错了吗?
  • 他们在 cedar 堆栈上一直默默支持 php。因为他们正在与 Facebook 合作。我想我可能会使用 Procfile 来做到这一点,但是没有专门针对 php 记录该用法。
  • 甚至没有那么沉默。 PHP 在这里声明:devcenter.heroku.com/articles/facebook
  • 看起来 Procfile 被 php 应用程序完全忽略了。 :-(
  • 他们也默默支持 Common Lisp 吗?

标签: php heroku


【解决方案1】:

您需要使用 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 文件。这个文件包含什么并不重要,但我添加了一些提醒,以便在我自己的应用程序中记录这些设置详细信息。

希望有帮助!

【讨论】:

    【解决方案2】:

    它实际上归结为创建一个自定义 boot.sh 并指向 Procfile 以在默认值上运行它。我已经在 github 上将它们与准系统结构放在一起:https://github.com/winglian/Heroku-PHP

    它还包含一个使用您自己的 conf 文件的钩子,所以请随意使用它并告诉我!

    【讨论】:

      【解决方案3】:
      web: vendor/bin/heroku-php-apache2 webroot/
      

      【讨论】:

      • 在您的项目根目录中创建文件 Procfile(无扩展名)并将这一行添加到其中。然后将 Procfile 推送到您的 Heroku 存储库。这个解决方案对我有用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 2012-12-28
      • 2016-01-25
      相关资源
      最近更新 更多