Ответ 1
Решение заключалось в изменении config.assets.compile = false
на config.assets.compile = true
в файле config/environments/production.rb
.
Если вы посмотрите на мое приложение здесь: http://quiet-brushlands-5712.herokuapp.com/, рядом с кнопкой находится значок, глификон. Но это не появляется на героку. локально он выглядит так же хорошо:
Я попробовал "решение" здесь Использование файла boostrap.css в Rails production/heroku без LESS или SASS и других ссылок в Google. Мне нужен глиф, чтобы показать на Heroku. Любая помощь?
Я не загружал загрузчик Twitter вручную, я просто использую драгоценный камень. В моей консоли Javascript у меня есть следующее:
GET http://quiet-brushlands-5712.herokuapp.com/assets/glyphicons-halflings.png 404 (Not Found)
My Gemfile, если это помогает:
source 'https://rubygems.org'
gem 'rails', '4.0.2'
gem 'sass-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails', '3.0.4'
gem 'turbolinks', '2.0.0'
gem 'jbuilder', '~> 1.2'
gem 'bootstrap-sass', '2.1'
gem 'jquery-ui-rails', '4.1.0'
gem 'pg'
gem 'font-awesome-rails', '4.0.3.0'
group :doc do
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', require: false
end
group :development, :test do
gem 'rspec-rails', '2.11.0'
gem 'guard-rspec', '1.2.1'
gem 'guard-spork', '1.2.0'
gem 'childprocess', '0.3.6'
gem 'spork', '0.9.2'
end
group :production do
gem 'rails_12factor'
end
Решение заключалось в изменении config.assets.compile = false
на config.assets.compile = true
в файле config/environments/production.rb
.
Решение, которое не использует резерв компиляции (проверено на Rails 4.1): В ваших файлах scss импортируйте bootstrap-sprockets непосредственно перед загрузкой.
@import "bootstrap-sprockets";
@import "bootstrap";
В дополнение к комментарию Vidya, вероятно, это будет ваш конвейер активов, что проблема
Хотя я не знаком со спецификой Bootstrap для этого, есть серьезная проблема с конвейером Heroku, поскольку он должен быть предварительно скомпилирован, прежде чем вы сможете эффективно использовать его
Фингерпринт с активами
Heroku требует, чтобы вы прекомпилировали свои активы из-за отпечатки активов
Здесь ваши активы будут иметь хэш, применяемый к концу их имени файла, например image-12sdafdsafkj223423jnjfadsnfsad.png
или тому подобное. Причина этого, по-видимому, заключается в том, чтобы сохранить активы уникальными или что-то типа
Если вы следуете ссылке, предоставленной Vidya, вы обнаружите, что Heroku предлагает вам предварительно скомпилировать ваши активы с помощью Rails CMD. Что это не говорит вам, что это испортит ваши изображения, если они не были динамически назначены
SCSS
Как уже упоминалось, я не уверен, как это относится к Bootstrap конкретно, но с материалами консорциума Heroku вам нужно обеспечить, чтобы ваши изображения были назначены с использованием динамических путей
Как и в Rails, SCSS позволяет использовать asset_path
или image_path
для создания динамической ссылки. Это то, что вам нужно сделать, чтобы исправить вашу проблему. Вот какой код мы используем, который работает на Heroku:
.navigation_bar {
z-index: 200;
position: relative;
background: asset_url('nav_bar/bg.png') repeat-x top;
}
Если вы не хотите, чтобы ваш config.assets.compile
был равен true в рабочей среде (что вам, вероятно, не нужно для повышения производительности), вы можете предварительно предварительно скомпилировать свои активы, прежде чем нажимать на герою, используя rake assets:precompile RAILS_ENV=production
В config/environments/production.rb
Изменить
config.assets.compile = false
в
config.assets.compile = true
(а затем не забудьте зафиксировать и нажать на герою)
Работал для меня...
Поскольку я пришел к этому ответу, когда я искал, я полагаю, что я должен сказать, что решение, с которым я столкнулся, состояло в том, чтобы включить импорт в "bootstrap-sprockets" перед загрузкой. Это описано в https://github.com/twbs/bootstrap-sass/issues/653.
Я понимаю, что вопрос не в использовании bootstrap-sass 3.2+, но я полагаю, что это может кому-то помочь.