Ошибка Heroku/Ruby-on-Rails: образ не компилируется

Я знаю, что Heroku запускает задачу rake assets:precompile:

-----> Writing config/database.yml to read from DATABASE_URL
-----> Preparing app for Rails asset pipeline
       Running: rake assets:precompile
-----> 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 17.7MB
-----> Launching... done

И я сказал ему прекомпилировать образы в production.rb.

# from: http://stackoverflow.com/questions/8052865/rails-3-1-asset-pipeline-why-my-images-do-not-precompile-for-production
config.assets.precompile += %w[*.png *.jpg *.jpeg *.gif] 

Так почему же я все еще получаю эту ошибку 500?

2012-05-29T02:57:15+00:00 app[web.1]: Started GET "/signin" for 46.114.68.16 at 2012-05-29 02:57:15 +0000
2012-05-29T02:57:15+00:00 app[web.1]: Processing by SessionsController#new as HTML
2012-05-29T02:57:15+00:00 app[web.1]:   Rendered sessions/new.html.erb within layouts/application (25.4ms)
2012-05-29T02:57:15+00:00 app[web.1]: Completed 500 Internal Server Error in 27ms
2012-05-29T02:57:15+00:00 app[web.1]: 
2012-05-29T02:57:15+00:00 app[web.1]: ActionView::Template::Error (twitter_64.png isn't precompiled):
2012-05-29T02:57:15+00:00 app[web.1]:     25: <div id="auths">
2012-05-29T02:57:15+00:00 app[web.1]:     27:   <a href="/auth/twitter" class="provider">
2012-05-29T02:57:15+00:00 app[web.1]:     26:   <h2>Or sign in through one of these:</h2>
2012-05-29T02:57:15+00:00 app[web.1]:     28:     <%= image_tag "twitter_64.png", :size => "64x64", :alt => "Twitter" %>Twitter</a>

Интересно, что у меня есть изображения на других страницах, которые отображаются просто отлично. Не знаю, почему некоторые изображения не будут работать, но некоторые...


person Geoff    schedule 29.05.2012    source источник
comment
Вы уверены, что twitter_64.png находится в каталоге ресурсов (app/assets/images, lib/assets/.. или vendor/assets..)?   -  person luacassus    schedule 04.06.2012
comment
Почему вы хотите предварительно скомпилировать изображения?   -  person ksol    schedule 08.06.2012


Ответы (2)


Во-первых, убедитесь, что у вас есть этот набор:

config.assets.initialize_on_precompile = false

Если это не сработает, стоит попробовать вручную запустить задачу предварительной компиляции перед сборкой слага; Я думаю, что есть тонкие различия, когда это делается следующим образом:

RAILS_ENV=production bundle exec rake assets:precompile

Наконец, это не решение, но если ничего не помогает, временным обходным путем будет установка

config.assets.compile = true
person Darshan Rivka Whittle    schedule 08.06.2012
comment
Спасибо за это, запуск RAILS_ENV=production bundle exec rake assets:precompile перед нажатием сработал для меня. - person Jason; 15.02.2013

Убедитесь, что вы размещаете свои изображения в

app/assets/images

и нет в

public/assets

напрямую.

Затем запустите rake assets:precompile и посмотрите, улучшится ли результат. Это может немного запутать.

person mjnissim    schedule 16.07.2012
comment
это копирует изображения в общедоступный каталог. Вы удаляете изображения из каталога app/assets/images после того, как они были добавлены в общедоступный каталог. Также возникли проблемы с тем, как ссылаться на файлы. Должен ли я использовать их обычное имя или имя stars-xxxx.jpg. - person flobacca; 14.11.2013
comment
1) Вам не нужно использовать странные имена, которые они получают из системы Rails, только их обычные имена. Если они находятся во вложенной папке, просто укажите их относительный путь, иначе даже не это. Оно знает, что делать. 2) Нет, не удаляйте папку app/assets/images после ее копирования. - person mjnissim; 14.11.2013