Rails 3.1 Asset Pipeline не работает через обратный прокси-сервер nginx - PullRequest
0 голосов
/ 23 августа 2011

Я обновляю приложение Rails 3.0 до Rails 3.1, и конвейер ресурсов не работает в процессе разработки.Я использую тонкий с обратным прокси-сервером nginx.

Например

javascript_include_tag 'application' # => <script src="/javascripts/application.js" type="text/javascript"></script>

И с curl ...

$ curl -sL -w "%{http_code}" "http://myapp.dev/javascripts/application.js" -o /dev/null
404
$ curl -sL -w "%{http_code}" "http://myapp.dev/assets/application.js" -o /dev/null
404

Но когда я ударил тонкий вместочерез nginx я получаю то, что ожидал:

javascript_include_tag 'application' # => <script src="/assets/application.js" type="text/javascript"></script>

Это работает?

$ curl -sL -w "%{http_code}" "http://localhost:3000/assets/application.js" -o /dev/null
200

Да!Почему это так?

Вот выдержка из моей конфигурации nginx: https://gist.github.com/1163638

Рад предоставить больше информации, просто спросите!

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Скорее всего, ваша проблема в том, что вам нужно предварительно скомпилировать ресурсы.Попробуйте запустить

rake assets:precompile

Это связано с тем, что nginx будет просто слепо пытаться обслуживать ресурсы, которые он должен, в отличие от сервера ruby, который проверит существование и скомпилирует, если они нене существует.

Я бы предложил посмотреть скринкаст Райана Бейтса на эту тему .

Редактировать:

Насколько я знаю, нетспособ заставить nginx передать запрос бэкэнду, если файл не существует, однако я не очень хорошо разбираюсь в настройке nginx, так что это, вероятно, будет хорошим вопросом для ServerFault .

1 голос
/ 23 августа 2011

Изменили ли вы файл среды разработки?По умолчанию работа конвейера активов выполняется только в производстве.

...