Активы прекомпилируются, не запускаясь на геройке кедра для рельсов 3.2 приложения
На этой неделе началась работа над новым приложением, в котором работают последние рельсы 3.2.2 с конвейером активов. Для активов я хотел бы, чтобы активы были скомпилированы при нажатии приложения на герою (вместо того, чтобы вручную компилировать и хранить скомпилированные активы в репо). Документы предполагают, что это должно произойти автоматически.
Проблема заключается в том, что при запуске git push heroku master
он вообще не запускает задачу rake assets:precompile
. Активы не собираются. Вот результат, который я получаю:
-----> Heroku receiving push
-----> Ruby/Rails app detected
-----> Installing dependencies using Bundler version 1.1.rc.7
Running: bundle install --without development:test --path vendor/bundle --binstubs bin/ --deployment
Using rake (0.9.2.2)
.......
.......
Your bundle is complete! It was installed into ./vendor/bundle
Cleaning up the bundler cache.
-----> Writing config/database.yml to read from DATABASE_URL
-----> Rails plugin injection
Injecting rails_log_stdout
Injecting rails3_serve_static_assets
-----> Discovering process types
Procfile declares types -> web
Default types for Ruby/Rails -> console, rake, worker
-----> Compiled slug size is 61.7MB
-----> Launching... done, v30
[appname] deployed to Heroku
У меня есть контейнер ресурсов включен в моем приложении .rb
require File.expand_path('../boot', __FILE__)
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "sprockets/railtie"
Bundler.require *Rails.groups(:assets) if defined?(Bundler)
module Appname
class Application < Rails::Application
# ...
# Enable the asset pipeline
config.assets.enabled = true
# Do not boot the app when precompiling assets
config.assets.initialize_on_precompile = false
end
end
Кто-нибудь знает, что может вызвать проблему? Я рад представить больше кода, если потребуется. Если я запустил heroku info
, он показывает, что я запущен в стеке Cedar.
Мне пришлось включить config.assets.compile = true
, чтобы прекратить получать 500 ошибок в производстве, хотя это компилирует активы во время выполнения (чего я не хочу).
Ответы
Ответ 1
Это, похоже, сейчас решено. Я считаю, что это вызвано тем, что Rakefile не загружает активы: прекомпилировать задачу в процессе производства.
Рейк файл загружал задачи как для огурцов, так и для rspec-драгоценных камней, которые не были включены в производство. В результате активы: прекомпиляционная задача была недоступна в производстве, поэтому геройку не пыталось запустить ее.
Я завернул тестовые задачи в настройке среды следующим образом:
if %(development test).include?(Rails.env)
require 'rspec/core'
require 'rspec/core/rake_task'
end
Ответ 2
Если в вашем Rakefile что-то не так, то шаг прекомпиляции будет пропущен полностью. Для меня я имел в виду зависимость, которая была загружена только в моей среде тестирования и разработки, а не в производстве, поэтому rakefile бомбил.
Использование предложения от Lecky-Lao работало для меня.
heroku run rake -T --app staging-hawkmo
Running `rake -T` attached to terminal... up, run.1
rake aborted!
cannot load such file -- jasmine-headless-webkit
Как только я увидел, что это было так же просто, как обертывание Rakefile в тесте среды.
Ответ 3
Я обычно добавляю это к production.rb
:
# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
config.assets.precompile += %w( style.css grid.css ... geo.js jquery.flexslider-min.js)
и установите:
config.assets.compile = false
Ответ 4
Похоже, что это результат чего-то умирающего из-за фатальной ошибки, когда герой пытается запустить/проверить активы. На самом деле это не может быть связано с Rails 3.2. Я не знаю.
У меня не было времени ждать героику, чтобы помочь, поэтому я прошел через болезненный процесс ниже, чтобы определить, в чем проблема. Я также рекомендую вам это сделать.
-
Создайте новое, отдельное рельсы 3.2.2. В нем нет ничего кроме файлов по умолчанию. Создайте приложение heroku: heroku create --stack cedar
. Просто для вашего здравомыслия, вытащите это приложение в его нынешнем виде и посмотрите, что этап прекомпиляции происходит во время компиляции пули.
-
Скопируйте в новое приложение, каждый логический блок вашего приложения. Я начал с приложений/активов. (думая, что это что-то связано с активами и прекомпиляцией... nah) cp -R ../ProblemApp/app/assets/* app/assets/
Затем добавьте, зафиксируйте и нажмите на удаленный сервер heroku git.
-
В какой-то момент вы собираетесь скопировать группу файлов, которая остановит их: появится сообщение с прекомпиляцией во время компиляции пули. Теперь, один за другим, верните эти файлы в исходное исходное состояние или закомментируйте подозрительные строки и отбросьте назад к героку. Когда вы снова увидите сообщение о предварительной компиляции, вы нашли свою проблему.
Оказалось, что для нас у меня было несколько ложных тревог. Когда я скопировал каталог config в новое приложение, имя модуля приложения было нашим старым приложением, а не новым. Это также мешало прекомпиляции, но это была не оригинальная причина, которую я искал.
В конце концов, у нас была задача рейка, которая отвечала за загрузку CSV-данных в приложение во время разработки. У него была одна строка, которая вызывала проблему:
require "#{Rails.root.to_s}/config/environment"
Комментируя эту строку в нашем оригинальном приложении, мы зафиксировали нашу проблему. Так относится ли это Rails 3.2? Почему герой запускает несвязанные рейк-задачи? Не знаю. Но дерьмо работает.:)
Ответ 5
Просто такая же проблема возникает как для Rails 3.1.3, так и для Rails 3.2.3. Следуя идее Марио, задача rake существует, когда я запускаю "rakk-rak-ra". Так кто-нибудь получил отзывы от Heroku обратной связи еще? Я мог бы просто собрать билет для этого, а затем...
Ответ 6
У меня была та же проблема, что и после этого руководства https://devcenter.heroku.com/articles/rails-asset-pipeline исправлено.
С уважением.
Ответ 7
Попробуйте добавить следующее в production.rb
config.assets.precompile = ['*.js', '*.css']
Я также нашел этот сайт https://coderwall.com/p/ga9l-a
Ответ 8
Переименуйте свой css в .css.erb и используйте тег asset_path в своем правиле.
например.
background: url(<%= asset_path 'bg.png'%>);
Как упоминалось в 2.3.1
http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets