Активы прекомпилируются, не запускаются на героине кедра для рельсов 3.2 приложения - PullRequest
12 голосов
/ 13 марта 2012

На этой неделе мы начали работу над новым приложением, которое запускает последние версии 3.2.2 с конвейером ресурсов.Для активов я хотел бы, чтобы активы были скомпилированы при переносе приложения на heroku (вместо того, чтобы вручную компилировать и хранить скомпилированные активы в репо). Документы предполагают, что это должно произойти автоматически .

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

Ответы [ 8 ]

10 голосов
/ 01 апреля 2012

Это, кажется, решено сейчас.Я полагаю, это было вызвано тем, что Rakefile не загружал ресурсы: задача прекомпиляции в рабочей среде.

Rakefile загружал задачи для гемов огурца и rspec, которые не включены в производство.В результате задание assets: precompile не было доступно в производстве, поэтому heroku не пытался его запустить.

Я поместил тестовые задания в условную проверку среды следующим образом:

if %(development test).include?(Rails.env)
  require 'rspec/core'
  require 'rspec/core/rake_task'
end
6 голосов
/ 20 июля 2012

Если в вашем 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, требуемый в тесте среды.

4 голосов
/ 13 марта 2012

Я обычно добавляю это к 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
1 голос
/ 05 апреля 2012

Просто одна и та же проблема на Rails 3.1.3 и Rails 3.2.3. Следуя идее Марио, задание по рейку существует, пока я запускаю "heroku run rake -T". Так кто-нибудь еще получил отзыв от отзыва Heroku? Я мог бы просто поднять билет на это, а затем ...

1 голос
/ 15 марта 2012

Похоже, что это происходит от чего-то умирающего из-за фатальной ошибки, когда героку пытается запустить / проверить активы. Это может на самом деле не иметь отношения к Rails 3.2. Я не знаю.

У меня не было времени ждать, пока героку поможет, поэтому я прошел болезненный процесс ниже, чтобы определить, в чем проблема. Я рекомендую вам сделать это тоже.

  1. Создание нового отдельного приложения 3.2.2 для рельсов. Там нет ничего, кроме файлов по умолчанию. Создать приложение heroku: heroku create --stack cedar. Просто для вашего здравого смысла, вытолкните это приложение как есть и посмотрите, что шаг предварительной компиляции происходит во время компиляции слагов.

  2. Скопируйте в новое приложение каждый логический блок вашего приложения. Я начал с приложения / активов. (думая, что это как-то связано с активами и прекомпиляцией ... нет) cp -R ../ProblemApp/app/assets/* app/assets/ Затем добавьте, зафиксируйте и перенесите это в heroku git remote.

  3. В какой-то момент вы скопируете группу файлов, которая остановит ресурсы: сообщение прекомпиляции появится во время компиляции слагов. Теперь, один за другим, верните эти файлы в исходное состояние или закомментируйте подозрительные строки и вернитесь к герою. Как только вы снова увидите сообщение о прекомпиляции, вы нашли свою проблему.

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

В конце концов, у нас была задача rake, которая отвечала за загрузку данных CSV в приложение во время разработки. У него была одна строка, которая вызывала проблему:

require "#{Rails.root.to_s}/config/environment"

Комментирование этой строки в нашем оригинальном приложении решило нашу проблему. Так связан ли этот Rails 3.2? Почему в героку запускаются несвязанные грабли? Я не знаю. Но дерьмо работает. :)

0 голосов
/ 24 ноября 2013

Переименуйте ваш 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

0 голосов
/ 01 ноября 2013

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

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

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

0 голосов
/ 28 апреля 2013

У меня была такая же проблема, я следовал этому руководству https://devcenter.heroku.com/articles/rails-asset-pipeline исправил ее.

Привет.

...