Как развернуть приложение Symfony 5 на Heroku - PullRequest
0 голосов
/ 02 апреля 2020

Я использовал эти 2 сайта, чтобы помочь мне:

На моей панели управления Heroku все в порядке, там написано:

Сборка прошла успешно.

Но когда я открываю приложение, я получаю

403 Запрещенную ошибку. У вас нет прав доступа к этому ресурсу.

Затем я запустил

heroku logs --num 10

Полный результат в консоли:

2020-04-02T10:56:12.107189+00:00 heroku[router]: at=info method=GET 
path="/" host=portefolio-symfony.herokuapp.com request_id=0c0a08dd- 
5c11-4489-88e6-7d5246f38b09 fwd="176.189.137.142" dyno=web.1 
connect=0ms service=1ms status=403 bytes=363 protocol=https
2020-04-02T10:56:12.107944+00:00 app[web.1]: [Thu Apr 02 
10:56:12.107237 2020] [autoindex:error] [pid 161:tid 139621535053568] 
[client 10.32.165.53:18173] AH01276: Cannot serve directory /app/: No 
matching DirectoryIndex (index.php,index.html,index.htm) found, and 
server-generated directory index forbidden by Options directive, 
referer: https://dashboard.heroku.com/
2020-04-02T10:56:12.108260+00:00 app[web.1]: 10.32.165.53 - - 
[02/Apr/2020:10:56:12 +0000] "GET / HTTP/1.1" 403 199 
"https://dashboard.heroku.com/" "Mozilla/5.0 (X11; Linux x86_64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 
Safari/537.36
2020-04-02T11:30:01.272965+00:00 heroku[web.1]: Idling
2020-04-02T11:30:01.350792+00:00 heroku[web.1]: State changed from up 
to down
2020-04-02T11:30:02.554326+00:00 app[web.1]: SIGTERM received, 
attempting graceful shutdown...
2020-04-02T11:30:02.554551+00:00 app[web.1]: Stopping php-fpm...
2020-04-02T11:30:02.556082+00:00 app[web.1]: Stopping httpd 
gracefully...
2020-04-02T11:30:02.556083+00:00 app[web.1]: Stopping httpd...
2020-04-02T11:30:02.635664+00:00 app[web.1]: Shutdown complete.

Я видел, что это может быть из файла .htaccess в каталоге public /

DirectoryIndex index.php

<IfModule mod_negotiation.c>
  Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$
    RewriteRule .* - [E=BASE:%1]

    RewriteCond %{HTTP:Authorization} .+
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]

    RewriteCond %{ENV:REDIRECT_STATUS} =""
    RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
   <IfModule mod_alias.c>
      RedirectMatch 307 ^/$ /index.php/

   </IfModule>
</IfModule>

Здесь Procfile:

'web: $(composer config bin-dir)/heroku-php-apache2 public/'

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Хорошо, я нахожу решение! Вот подробности, которые помогут вам, если вам это нужно.

В базе. html .twig

{% block stylesheets %}
  <link rel="stylesheet" href="{{ asset('build/app.css') }}">
{% endblock %}

Затем я ставлю в конце тег script

{% block javascripts %}
  {{ encore_entry_script_tags('app') }}
{% endblock %}

В .htaccess

DirectoryIndex index.php

<IfModule mod_negotiation.c>
   Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
   RewriteEngine On

   RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$
   RewriteRule .* - [E=BASE:%1]

   RewriteCond %{HTTP:Authorization} .+
   RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]

   RewriteCond %{ENV:REDIRECT_STATUS} =""
   RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
  <IfModule mod_alias.c>

     RedirectMatch 307 ^/$ /index.php/
  </IfModule>
</IfModule>

В приложении. js Я добавил эту строку:

require('../css/app.scss');

В webpack.config. js:

Encore
    // directory where compiled assets will be stored
    .setOutputPath("public/build/")
    // public path used by the web server to access the output path
    .setPublicPath("/build")
    // only needed for CDN's or sub-directory deploy
    //.setManifestKeyPrefix('build/')
    .copyFiles({
        from: './assets/images'
    })

    .addEntry("app", "./assets/js/app.js")

В пакете. json Я добавил эту строку в:

"scripts": {
  "postinstall": "encore production --progress"
 },

В Procfile только эта строка

web: $(composer config bin-dir)/heroku-php-apache2 public/

И, наконец, в Heroku> Настройки> Config Vars

  • NODE_MODULES_CACHE = false
  • NPM_CONFIG_PRODUCTION = false
  • YARN_PRODUCTION = false

Heroku> Настройки> Buildpack

  • heroku / nodejs
  • heroku / php

Вот ссылка, которую я использовал, чтобы помочь мне снова

0 голосов
/ 03 апреля 2020

Это идет немного вперед. Я добавил переменные окружения в Heroku для Webpack:

NODE_MODULES_CACHE=false
NPM_CONFIG_PRODUCTION=false
YARN_PRODUCTION=false

Затем я добавил buildpack node.js:

heroku/nodejs
heroku/php

В приложении. js Я добавил эта строка для моего приложения.s css

require('../css/app.scss');

Я тестирую на pu sh на Heroku, и приложение работает в стиле s css, и это хорошая новость. Но мой javascript не работает. И все же я добавил:

{% block javascripts %}
   <script src="{{ asset('build/app.js') }}"></script>
{% endblock %}

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...