Ошибка 404 приложения Sinatra в рабочем режиме

#apache #sinatra #passenger

#Apache #Sinatra #пассажир

Вопрос:

Мои производственные настройки следующие:

  • Ubuntu 10.10
  • Rails 3.1.1
  • Пассажир 3.0.9
  • Sinatra 1.3.1
  • Apache 2.2.17

Я протестировал свое приложение на своей машине для разработки без проблем, но при развертывании на своем рабочем сервере отображается ошибка «Страница не найдена» (не обычная ошибка apache).).

Я могу работать с помощью rackup config.ru без проблем, поэтому предположим, что это должна быть проблема apache / passenger и, возможно, связанная с path. Теперь я устал на двух разных серверах, оба выдают одну и ту же ошибку.

Мой config.ru файл выглядит следующим образом:

 require 'rubygems'
require 'sinatra'

use Rack::ShowExceptions

#set :public_folder, File.expand_path(File.dirname(__FILE__)   "/public")
#set :views, File.expand_path(File.dirname(__FILE__)   "/views")

root_dir = File.dirname(__FILE__)
set :root,        root_dir
disable :run

FileUtils.mkdir_p 'log' unless File.exists?('log')
log = File.new("log/sinatra.log", "a")
$stdout.reopen(log)
$stderr.reopen(log)

#use Rack::ShowExceptions

require File.dirname(__FILE__)   "/bin/hsloginapp"
run Sinatra::Application
  

Мой файл виртуального хоста:

 <VirtualHost *:4090>
    ServerName sinatra-demo.xxxxxxx.net
    DocumentRoot "/var/www/html/hsloginapp/production/current/public"
    <Directory /var/www/html/hsloginapp/public>
        Order allow,deny
        Allow from all
        Options FollowSymLinks
    </Directory>
</VirtualHost>
  

Мое приложение слишком сложно вставить все здесь, но я с удовольствием вставлю части, если потребуется.

У меня нет проблем с простым приложением Sinatra, и поэтому я чувствую, что все работает нормально. Я потратил на это четыре дня — это сводит меня с ума.

На самом деле даже не видно, откуда берется этот 404. Все, что я вижу в своем sinatra.log, это:

 [16/Oct/2011 20:55:41] "GET / " 404 18 0.0008
  

У меня нет индексного файла в моей общей папке, хотя у меня его нет в других моих пассажирских / rails-приложениях…

Любые предложения приветствуются!!

— ОБНОВИТЬ —

Думая, что моя конфигурация apache, возможно, была заполнена, я установил nginx и получил ту же страницу Not Found. Который, похоже, нигде не существует в моей файловой системе.

Просматривая мой журнал sinatra, похоже, что запускается webrick — я понятия не имею, почему?

 2011-10-22 15:13:12] INFO  WEBrick 1.3.1
[2011-10-22 15:13:12] INFO  ruby 1.8.7 (2010-08-16) [x86_64-linux]
[2011-10-22 15:13:17] WARN  TCPServer Error: Address already in use - bind(2)
== Someone is already performing on port 4990!
94.194.200.254 - - [22/Oct/2011 15:13:17] "GET / " 404 18 0.0636
94.194.200.254 - - [22/Oct/2011 15:13:18] "GET /favicon.ico " 404 18 0.0012
  

Я думаю, в этом проблема ?! Требуется помощь 🙂

— ОБНОВЛЕНИЕ 2 —

Только что заметил в моем журнале ошибок nginx, что система пытается загрузить public/index.html

 *9 "/var/www/html/hotspotlogin/public/index.html" is not found (2: No such file or directory)
  

Разве passenger / nginx не должен знать, что здесь делать ??!

Комментарии:

1. Нужно проверить одну вещь: есть ли у пользователя apache разрешения на чтение и выполнение для всех каталогов над каталогом развертывания ваших приложений?

2. Привет @matt — просто буквально попробовал это. Измените все файлы, включая корень apache, на 777, чтобы увидеть. Все еще нет радости. Спасибо за помощь 🙂

3. Могу ли я заметить, что ваши DocumentRoot и правила каталогов отличаются? Или это просто вопрос

4. Привет @matt. Они такие же на моем рабочем сервере, но я сократил, поскольку у них был домен компании. Хорошо замечено, хотя 😉

5. Где вы настроили passenger или прокси?

Ответ №1:

Вероятно, проблема в том, что у вас неправильно настроен пассажир.

В Apache убедитесь, что у вас где-то есть эта строка:

 LoadModule passenger_module /somewhere/passenger-x.x.x/ext/apache2/mod_passenger.so
  

В nginx ваша конфигурация должна включать эту строку:

 passenger_enabled on;
  

Обратите внимание, что вы пытаетесь запустить Sinatra с помощью WEBrick, а не с помощью Rassenger / Apache в примере с журналами (и этот порт недоступен). Для запуска его с помощью Passenger вам нужно будет написать config.ru , поскольку Пассажир ничего не знает о Синатре.

Комментарии:

1. Привет. Я опубликую свой config.ru завтра утром. Не думайте, что он пытается работать с webrick, хотя в журналах указано использование для резервного копирования. Любое пустое приложение sinatra работает просто отлично: (кроме того, у меня загружены пассажирские файлы в другом месте, но я могу попробовать на этом виртуальном хосте. У Nginx есть это в server conf. J