2012-05-18 2 views
2

Я использую unicorn для подачи заявки sinatra, а интерфейс использует bootstrap.js и jQuery(UI).Sinatra, Единорог и обслуживание JavaScript

В настоящее время, когда я запускаю приложение на своем локальном компьютере и получаю доступ к странице с моей локальной машины, все так, как должно быть. Тем не менее, у меня были сотрудники, соединяясь со своими машинами в локальной сети, и их результаты разные. Немного непонятно, какие нагрузки и что нет, но одно можно сказать наверняка: не все JavaScript отправляются на удаленные компьютеры. На домашней странице используются вкладки jQueryUI, но когда страница загружается на любой хост, но сервер, он отображает без них (вместо этого есть маркированный список со ссылками).

Файлы .js ссылаются на обычные теги HTML <script> в файлах ERB, которые обслуживаются Sinatra.

Выход из единорога предполагает, что JS-файлы становятся запросили и отправлены правильно (я получаю HTTP 200 статус для каждого):

xxx.xxx.xxx.xxx - - [18/May/2012 09:41:12] "GET /js/jquery-1.7.2.min.js HTTP/1.1" 200 94840 0.0257 
xxx.xxx.xxx.xxx - - [18/May/2012 09:41:12] "GET /js/jquery-ui-1.8.20.custom.min.js HTTP/1.1" 200 206731 0.0113 
xxx.xxx.xxx.xxx - - [18/May/2012 09:41:12] "GET /js/bootstrap.js HTTP/1.1" 200 50089 0.0056 

Местных разрешения на каждый файл 755, и они расположены в [app_root]/public/js.

Очевидно, что моя проблема не является с Sinatra или Unicorn, но это мой контекст на данный момент. Пожалуйста, дайте мне знать, если есть что-то, что я должен изучить, или если к вопросу добавляется дополнительная информация.

ответ

0

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

Я использовал Unicorn на своей локальной машине, которая является MacBook Pro. Я решил развернуть экземпляр AWS с изображением Ubuntu и установить там приложение (которое является предполагаемым вариантом использования после завершения приложения). Без изменения конфигурации вообще приложение отлично работает на узле AWS. Очевидно, что MBP не знает, как быть веб-сервером.

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

1

Я думаю, что проблема заключается в DSL-связи, Sinatra не понимает, что /js/jquery-1.7.2.min.js маршрута, если вы не имеете его описали в своем коде, но как только это статический файл, который вы можете сделать это:

set :public, File.dirname(__FILE__) + '/js' 

это говорит Sinatra, что все файлы в вашей папке /js являются статическими и должны быть надлежащим образом отправлены

+0

Я добавил это к вопросу, чтобы уточнить, но мои файлы javascript находятся в '[app_root]/public/js' - это должно позаботиться о том, чтобы обслуживать их как статические, не так ли? – asfallows

+1

Да, но я рекомендую вам запустить приложение без Единорога и выяснить, правильно ли в этом случае Sinatra обслуживает ваши файлы .js'. – user973254

+0

Поскольку у меня есть больше, чем просто js, которые должны быть общедоступными, я 'set: public_folder, File.dirname (__ FILE__) + '/ public'', который является родителем' js/'(и' css/'и 'IMG /'). Сделав это изменение, поведение Unicorn не изменилось, и когда я запускаю Sinatra самостоятельно, я получаю 404 на индексной странице. – asfallows

Смежные вопросы