2015-12-20 3 views
2

Это первый раз, когда я попытался поместить приложение Rails на сервер, работающий в рабочем режиме, без использования EngineYard через пару лет. Вероятно, я многого не помню. Это версия 4.2.5.Почему мои активы не загружаются в производство?

Я не развертываю с Капистрано, сейчас я не переживаю все эти проблемы. Это внутреннее приложение для моей команды. Я просто вытаскиваю код из Github, когда что-то обновляю. Очень просто.

Приложение подходит без проблем. И я побежал:

rake assets:precompile 

Но все активы дают 404. Приходит только мое сырое приложение.

Я даже не пытаюсь запустить Nginx прямо сейчас. Я запускаю Webrick или пытаюсь запустить процесс единорога, я не получаю CSS.

И все же, все файлы, которые показывают 404-х, я вижу их очень, очень ясно в:

<app root>/public/assets 

ли WEBrick и Единорог не в состоянии обслуживать эти активы по какой-то странной причине? Если да, то какая причина может быть? Нужно ли делать полное развертывание с использованием Nginx и Passenger на простом, внутреннем образе, ничего из приложения?

Что мне не хватает?

ответ

2

Во-первых, как говорили другие, пожалуйста, проверьте, что вы работаете в режиме производства? Во-вторых, вы упомянули, что работаете в WEBrick. Is config.serve_static_files установлен на true?

config.serve_static_files настраивает сам Rails для обслуживания статических файлов . Значение по умолчанию равно true, но в рабочей среде отключено , поскольку серверное программное обеспечение (например, NGINX или Apache), используемое для запуска приложения , должно вместо этого использовать статические активы. В отличие от настройки по умолчанию установить это верно, когда работает (! Абсолютно не рекомендуется) или тестирования приложения в рабочем режиме с помощью WEBrick

http://guides.rubyonrails.org/configuring.html#rails-general-configuration

+0

Значение по умолчанию в 4.2.5 для производственной среды является: '' 'config.serve_static_files = ENV ['RAILS_SERVE_STATIC_FILES']. present? '' '. Я не задал эту переменную среды. Как только я это сделал, это сработало. Спасибо, очень любезно. – AKWF

+0

@AKWF приветствую :) –

0

Вы должны написать

$rake assets:precompile RAILS_ENV=production 

Также вы должны установить в config_assets_precompile = true в конфиг/Инициализаторы/assets.rb файл

Также попробуйте therubyracer камень.

-1

Отсутствие CSS/JS предполагает, что ваши активы не загружаются в производство (очевидно).

Способ исправить это либо использовать то, что Ruby Doggy рекомендуется (и предварительно скомпоновать активы до нажатия на производство), либо использовать что-то вроде крюка post-receive для достижения того же.

Одним из важных факторов для рассмотрения является то, что environment variables вы установили. Я никогда не использовал Engine Yard, но Heroku устанавливает RAILS_ENV вар для каждого приложения:

enter image description here

Если бы я тебя, я установил бы RACK_ENV и RAILS_ENV переменные в производственной окр ОС:

EXPORT RAILS_ENV=production 
EXPORT RACK_ENV=production 

https://askubuntu.com/a/731

Это установит окр вары, который должен позволяют вам вызывать rake assets:precompile после нажатия, чтобы получить правильные активы.

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