У меня есть вызов ajax, который отправляет сообщения /php/rsvp.php
, По какой-то причине, когда этот вызов проходит через веб-сервер, к пути добавляется index.html. Приложение размещено на героку с использованием пумы. Журналы с трассировкой стека находятся ниже:
2015-10-12T01:48:57.898961+00:00 heroku[router]: at=info method=POST path="/php/rsvp.php" host= request_id= fwd="" dyno=web.1 connect=1ms service=9ms status=500 bytes=168
2015-10-12T01:48:57.901579+00:00 app[web.1]: 2015-10-12 01:48:57 +0000: Rack app error: #<Errno::ENOTDIR: Not a directory @ rb_sysopen - /app/_site/php/rsvp.php/index.html>
2015-10-12T01:48:57.901635+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-jekyll-0.4.1/lib/rack/jekyll/helpers.rb:14:in `initialize'
2015-10-12T01:48:57.901639+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-jekyll-0.4.1/lib/rack/jekyll/helpers.rb:14:in `open'
2015-10-12T01:48:57.901640+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-jekyll-0.4.1/lib/rack/jekyll/helpers.rb:14:in `file_info'
2015-10-12T01:48:57.901642+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-jekyll-0.4.1/lib/rack/jekyll.rb:75:in `call'
2015-10-12T01:48:57.901644+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/puma-2.9.1/lib/puma/configuration.rb:71:in `call'
2015-10-12T01:48:57.901645+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/puma-2.9.1/lib/puma/server.rb:490:in `handle_request'
2015-10-12T01:48:57.901647+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/puma-2.9.1/lib/puma/server.rb:361:in `process_client'
2015-10-12T01:48:57.901649+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/puma-2.9.1/lib/puma/server.rb:254:in `block in run'
2015-10-12T01:48:57.901652+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/puma-2.9.1/lib/puma/thread_pool.rb:92:in `call'
2015-10-12T01:48:57.901692+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/puma-2.9.1/lib/puma/thread_pool.rb:92:in `block in spawn_thread'
Я просматривал функции puma и rack-jekyll, чтобы найти, где происходит добавление, но ни одно из условий не имеет смысла. Мне также еще предстоит найти какой-либо другой пост по этому вопросу, что заставляет меня думать, что я наблюдаю за чем-то простым. Выполнение Ajax-вызова довольно просто:
req = $.post( '/rsvp.php', $form.serialize(), function(data, status){});
Есть ли какая-то конфигурация, которую мне не хватает, чтобы предотвратить это? Мой Gemfile, _config.yml, config.ru и т. Д. Идентичны Вот.
Так что у нас тоже была эта проблема, и мы ее только что поняли. Проблема в том, что rack-jekyll
В gem есть ошибка, в которой предполагается, что файлы без mime-типов являются каталогами. Смотрите вопрос: https://github.com/adaoraul/rack-jekyll/issues/38
Исправление уже сделано, и похоже, что оно выйдет с 0.4.3, но в то же время нам удалось исправить проблему, добавив следующую строку в наш файл config.ru, который добавляет тип MIME для расширений .php. :
Rack::Mime::MIME_TYPES.merge!({".php" => "application/octet-stream"})
Других решений пока нет …