3

В настоящее время кажется, что Heroku настроен на предварительную компиляцию активов, когда я подталкиваю свой код к моим экземплярам.Предотвращение использования Herocu из предварительно скомпилированных активов в режиме разработки

Это замечательно подходит для производственных серверов, однако для моего сервера «RAILS_ENV = development» это вызывает проблемы, так как теперь я получаю страницы со всеми файлами JavaScript, обслуживаемыми индивидуально из манифеста моего ресурса, а затем еще один файл с тем же код сгруппирован как скомпилированный актив.

Это приводит к тому, что библиотеки библиотек jquery datatables разбиваются, вызывая всплывающие ошибки, которые я не получаю в своей локальной среде (разработка или производство) или в моем экземпляре Heroku производства.

Есть ли способ отключить предварительную компиляцию активов на Heroku для экземпляров режима разработки? Или есть какая-то причина, почему они еще не отключены при разработке серверов Heroku?

ответ

2

Если Heroku обнаружит файл public/assets/manifest.yml, то они не будут пытаться прекомпилировать ваши активы и предположить, что вы имеете дело с ними самостоятельно. Подробнее на http://devcenter.heroku.com/articles/rails31_heroku_cedar

+1

Это связано с необходимостью иметь отдельный набор кода, который я нажимаю на разработку и (в противном случае производство остановило бы предварительную компиляцию активов тоже!) Спасибо за подсказку - я могу запустить и запустить, но мне интересно, может ли herkou предложить решение, где мне не нужно иметь другой набор кода/git для разработки heroku (например, переменная ENV или использовать значение сценария rb среды Ruby) – Phantomwhale

+0

Если в вашем приложении обнаружен public/assets/manifest.yml, Heroku предположит, что вы сами обрабатываете компиляцию активов и не будете пытаться скомпилируйте свои активы. В Rails 4 должен существовать public/assets/manifest- .json. В обеих версиях вы можете сгенерировать этот файл, запустив $ rake assets: предварительно скомпилируйте локально и проверив результирующие файлы в Git. –

0

AFAIK, Heroku должен предварительно скомпоновать активы для работы с их FS только для чтения и тот факт, что конвейер ресурсов Rails хочет записать файлы в FS. Единственное, что я мог бы предложить, это выяснить, почему ваши активы ломаются при компиляции.

+0

Я верю, что это потому, что они загружаются дважды. Как только рельсы режима разработки деконструируют файл манифеста JS и включают все отдельные JS-ссылки на странице, а затем снова, когда страница продолжает загружать предварительно скомпилированный манифест JS, который содержит весь код снова. Это не происходит на моей локальной машине разработки (которая не имеет предварительно скомпилированных активов) или в какой-либо производственной среде (где все активы должны быть предварительно скомпилированы) – Phantomwhale

0

Я работал над этим, добавив некоторые Voodoo в мой Rakefile, чтобы отключить активы: предварительно скомпилируйте задачу рейка.

первым добавить пользователя-ENV-компилировать лаборатории компонент

heroku labs:enable user-env-compile 

затем добавьте в начале моего Rakefile

# found from http://blog.jayfields.com/2008/02/rake-task-overwriting.html 
# used by conditional heroku asset compile magick 
class Rake::Task 
    def overwrite(&block) 
    @actions.clear 
    enhance(&block) 
    end 
end 

Затем я добавить эту рейк задачу в Lib/задач/disable_assets_on_heroku .rake

if ENV['RAILS_ENV'] == 'development' 
    namespace :assets do 
    task(:precompile).overwrite do 
     puts "Asset precompile skipped in #{ENV['RAILS_ENV']}" 
    end 
    end 
end 
Смежные вопросы