Подтвердить что ты не робот

Активы прекомпилируются, не запускаясь на геройке кедра для рельсов 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 ошибок в производстве, хотя это компилирует активы во время выполнения (чего я не хочу).

4b9b3361

Ответ 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 обратной связи еще? Я мог бы просто собрать билет для этого, а затем...

Ответ 7

Попробуйте добавить следующее в production.rb

config.assets.precompile = ['*.js', '*.css']

Я также нашел этот сайт https://coderwall.com/p/ga9l-a