Локальная предварительная компиляция ресурсов в Rails 4.2.5 создает проблемы со значениями по умолчанию для production.rb.

Я создал экспериментальный веб-сайт с использованием Rails ver. 4.2.5.1 на Linux-системе CentOS 6.6. Я следовал руководству «Начало работы с Rails» и руководству по сборке Weblog, а затем внес изменения для использования SSL и запуска в рабочем режиме.

Чтобы предварительно скомпилировать активы (javascript и изображения), я запустил «rake assets:clobber», чтобы удалить предыдущие кешированные результаты, а затем «rake assets: precompile». Это создает «отпечатки пальцев» имен файлов (длинная шестнадцатеричная строка (хеш MD5?), связанная с исходными именами файлов) и отбрасывает скомпилированные ресурсы в каталог ../Weblog/public/assets.

Процесс «assets:precompile» задокументирован в документации Rails «Asset Pipeline» и документации Sprockets. Документация, которой я следовал, находится по адресу:

http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets
https://github.com/rails/sprockets-rails

Файл "production.rb", сгенерированный по умолчанию с использованием методов, описанных в руководстве "Начало работы с Rails", похоже, не работает. Я запускаю сервер WEBrick rails, используя двухстрочный файл сценария, а именно:

    export SSL=true
    rails server -b 0.0.0.0  -p 3000  -e production

Я хотел использовать функцию assets:precompile, и чтобы это работало, я внес изменения в файл «config/application.rb» в соответствии с документацией sprockets-rails и включил строку:

требуют «звездочки / рельсы»

Мне также пришлось внести изменения в файл «config/environments/production.rb». Версия файла по умолчанию имела:

     # Compress JavaScripts and CSS.
     config.assets.js_compressor = :uglifier
     # config.assets.css_compressor = :sass

Обратите внимание, что строка :uglifier была активной, а строка :sass закомментирована.

В файле production.rb по умолчанию также была эта строка:

     # Do not fallback to assets pipeline if a precompiled asset is missed
     config.assets.compile = false

Что мне нужно было сделать, чтобы сервер WEBrick действительно работал с ресурсами предварительной компиляции в рабочем режиме из коробки Linux, так это вызвать css_compessor и закомментировать строку «config.assets.compile = false», а не переключать ее. . (Если активы уже предварительно скомпилированы локально, то мне не нужно или я не хочу их компилировать вживую, как я предполагаю)

Изменения в файле config/production.rb, позволяющие веб-серверу производственного режима работать в системе CentOS, следующие:

     # Compress JavaScripts and CSS.
     # config.assets.js_compressor = :uglifier
     config.assets.css_compressor = :sass

     # Do not fallback to assets pipeline if a precompiled asset is missed
     # config.assets.compile = false

И это, кажется, делает это. Без этих изменений изображения не отображались бы в браузере (Firefox 44 для Windows/Safari для iOS/Firefox для Android 5.1.1), а ссылка «Удалить» (для вызова метода удаления и удаления статьи из базы данных статей) не будет вызывать диалоговое окно подтверждения или выполнять действие удаления. С указанными выше изменениями в production.rb все работает, поэтому, когда я запускаю сервер, отображаются файлы изображений, и javascript для фактического запуска процесса «Уничтожить/удалить» передается в браузер и на веб-сайт учебного веб-журнала. работает как положено. Но это не сработает, если «config.assets.js_compressor = :uglifier» включено (путем удаления комментария #), и не сработает, если «config.assets.compile = false» не закомментировано.

Насколько я могу судить, предварительная компиляция работает, и предварительно скомпилированные активы с информацией об отпечатках пальцев (длинная шестнадцатеричная строка MD5), добавленной к именам файлов файлов изображений, обслуживаются правильно, как и javascript. Я понимаю, что большинство развертываний приходится на Heroku и AWS, поэтому использование моего собственного оборудования для режима производства немного нестандартно для Rails с WEBrick, но мне любопытно, почему. Я пропустил какой-то необходимый шаг?

Есть ли другой (лучший?) способ предварительной компиляции ресурсов, предполагая, что производственный режим запускается на локальном компьютере с Linux? И есть ли очевидная причина, по которой ":uglifier" не работает? Спасибо.


person Rusfuture    schedule 15.04.2016    source источник
comment
Обновление: этот вопрос был похож и имел половину ответа...   -  person Rusfuture    schedule 15.04.2016
comment
Обновление: этот вопрос был похож и содержал половину ответа... stackoverflow.com/questions/18700219/ Поместите config.assets.precompile = ['.js','.css', '*.css. эрб'], в произв.рб. Кроме того, команда для предварительной компиляции: RAILS_ENV=production bundle exec rake assets:precompile. Но если я раскомментирую config.assets.js.compressor = :uglifier, javascript jquery_ujs для Destroy не будет работать. Проблема выглядит так, как будто это компрессор javascript.   -  person Rusfuture    schedule 15.04.2016