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

Rails 3.1 развертывание на heroku.css не является прекомпилированной ошибкой

Обновление

Я получил эту ошибку, потому что у меня был файл public.css и public.js, который не был скомпилирован с остальными .css и .js файлами. Решение заключалось в том, чтобы добавить эту строку в файл production.rb

# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
config.assets.precompile += %w( public.js public.css  )

Как видно из комментария, все приложения имен файлов уже добавлены. Поэтому мне просто пришлось добавить те, которые не назывались приложениями.

Надеюсь, это поможет кому-то!

Оригинальный вопрос

У меня есть этот файл gem

gem 'rails', '3.1.0'

group :production do
  gem 'pg'
end
group :development, :test do
  gem 'sqlite3'
end

gem "heroku"
gem 'thin'
gem 'sass-rails', "  ~> 3.1.0"
gem 'coffee-rails', "~> 3.1.0"
gem 'tabulous'
gem 'json'
gem "paperclip", "~> 2.4"
gem "devise"
gem "redcarpet"

group :assets do

  gem 'uglifier'
end

gem 'jquery-rails'

gem "rspec-rails", :group => [:test, :development]
group :test do
end

когда я развертываю с помощью git push heroku master ", я вижу это

Preparing app for Rails asset pipeline
       Running: rake assets:precompile
       mkdir -p /tmp/build_2m34y4hj01m4o/public/assets
       mkdir -p /tmp/build_2m34y4hj01m4o/public/assets
       mkdir -p /tmp/build_2m34y4hj01m4o/public/assets
       mkdir -p /tmp/build_2m34y4hj01m4o/public/assets/admin
       mkdir -p /tmp/build_2m34y4hj01m4o/public/assets/admin
-----> Rails plugin injection
       Injecting rails_log_stdout
       Injecting rails3_serve_static_assets
-----> Discovering process types
       Procfile declares types      -> (none)
       Default types for Ruby/Rails -> console, rake, web, worker
-----> Compiled slug size is 31.2MB
-----> Launching... done, v5
       http://maktaba.herokuapp.com deployed to Heroku

но в журналах heroku я получаю этот ActionView:: Template:: Error. css не предварительно скомпилирован Странно.. Я смотрел обратную связь с развертыванием

2011-11-23T22:59:48+00:00 app[web.1]: Rendered public/index.html.erb within layouts/first (0.7ms)
2011-11-23T22:59:48+00:00 app[web.1]: Completed 500 Internal Server Error in 30ms
2011-11-23T22:59:48+00:00 app[web.1]:
2011-11-23T22:59:48+00:00 app[web.1]: ActionView::Template::Error (public/public.css isn't precompiled):
2011-11-23T22:59:48+00:00 app[web.1]:     2: <html>
2011-11-23T22:59:48+00:00 app[web.1]:     3: <head>
2011-11-23T22:59:48+00:00 app[web.1]:     4:   <title>Maktaba</title>
2011-11-23T22:59:48+00:00 app[web.1]:     5:   <%= stylesheet_link_tag    "public/public" %>
2011-11-23T22:59:48+00:00 app[web.1]:     6:   <%= javascript_include_tag "public/public" %>
2011-11-23T22:59:48+00:00 app[web.1]:     7:   <%= csrf_meta_tags %>
2011-11-23T22:59:48+00:00 app[web.1]:     8:   <%= csrf_meta_tags %>
2011-11-23T22:59:48+00:00 app[web.1]:   app/views/public/index.html.erb:5:in `_app_views_public_index_html_erb___1726244208117637261_45234420'
2011-11-23T22:59:48+00:00 app[web.1]:   app/controllers/public_controller.rb:13:in `block (2 levels) in index'
2011-11-23T22:59:48+00:00 app[web.1]:
2011-11-23T22:59:48+00:00 app[web.1]:   app/controllers/public_controller.rb:12:in `index'

Может ли кто-нибудь из вас увидеть, что я делаю неправильно?

4b9b3361

Ответ 1

  • Запустите bundle exec rake assets:precompile в своем локальном коде
  • Зафиксируйте изменения и развернитесь в heroku

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

Ответ 2

На самом деле вам нужно выполнить предварительную компиляцию для среды production:

  • Запустите RAILS_ENV=production bundle exec rake assets:precompile на локальном
  • Зафиксировать и развернуть в Heroku

В более широком смысле Документы Heroku описывают три варианта компиляции активов для Rails 3.1+ на Cedar:

  • Скомпилировать локально (в этом ответе)
  • Скомпилировать во время компиляции пули
  • Скомпилировать во время выполнения