Невозможно заставить CSS работать на Heroku, используя Rails 4 с самонастраивающимся камнем
Я развернул приложение к Heroku с одной проблемой, о которой я не могу понять. CSS для приложения через Bootstrap-sass
не загружается, поэтому у меня есть нестандартное приложение. На данный момент это всего лишь коллекция статических страниц.
В README я выполнил только один шаг https://github.com/thomas-mcdonald/bootstrap-sass Шаг, который я не могу понять и, скорее всего, буду моей проблемой как следует. Из-за изменения Rails, который не позволяет скомпилировать изображения в поставщике и lib, вам нужно добавить следующую строку в application.rb:
config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
Поскольку я все еще очень новичок в программировании, первая проблема заключается в том, что я не знаю, где и как добавить это в файл application.rb. Я был бы очень признателен, если бы кто-нибудь помог мне показать, как и где правильно добавить вышеприведенную строку кода.
Вторая проблема может быть связана с драгоценными камнями, которые я использую, однако, когда я создал приложение, камень sass-rails был установлен с ~ > 4.0.0.beta1. Согласно README, версия для использования - 3.2. Так как это также может быть проблемой, я включил файл gem, если кто-либо определит, что является основной причиной моей проблемы.
Заранее благодарим за любую помощь, которую вы можете предоставить.
Изменить: Чтобы добавить шаги, которые я предпринял при первой попытке, которые привели к правильной работе стиля на моем локальном хосте, но не один раз, когда код был развернут в heroku.
- Создано новое приложение rails 4 (файл gem ниже)
- Добавлен бутстр-сасс-камень, указанный в файле gem ниже
- Добавил жемчужину PG к моему файлу gem в производственной группе и переместил SQLite3 на разработку и тестирование (была запущена установка пакета - без производства в соответствии с шагами 2 и 3).
- создал контроллер страниц для статической домашней страницы
- Добавлен h1 в блок героя на главной странице, чтобы увидеть, работает ли стиль.
- добавил файл styles.css.scss и включил @import 'bootstrap'; в таблицу стилей
- Создал репозиторий git, выполнил мой первоначальный коммит и нажал код на git
- Создано приложение heroku и подтолкнуло мастера к герою
Во второй попытке я добавил навигационную панель на домашнюю страницу (если это имеет значение для всех) и повторил шаги 7 и 8, но перед выполнением этих шагов я выполнил следующую строку кода.
RAILS_ENV=production bundle exec rake assets:precompile
У меня все еще был сайт, который был подходящим для моего локального хоста, но на Heroku не было стиля. Как я уже отмечал выше в своем первоначальном посте, есть строка кода, которую нужно добавить в файл application.rb, который я не соблюдал из-за моего понимания того, как правильно добавить строку кода в файл.
Gemfile:
source 'https://rubygems.org'
ruby "2.0.0"
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0.beta1'
group :production do
gem 'pg'
end
group :development, :test do
gem 'sqlite3'
end
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 4.0.0.beta1'
gem 'coffee-rails', '~> 4.0.0.beta1'
gem 'bootstrap-sass', '~> 2.3.1.1'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 1.0.1'
# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'
# Use unicorn as the app server
# gem 'unicorn'
# Deploy with Capistrano
# gem 'capistrano', group: :development
# To use debugger
# gem 'debugger'
Ответы
Ответ 1
Я только сейчас (13 июня 2013 года) получил этот ответ от разработчиков Heroku, чья поддержка провела меня через барьеры.
Вот как я получил свой css-дисплей от localhost, работающего в моем приложении Heroku.
"Все, что вам нужно сделать, - включить актив, служащий в производстве, и установить регистратор на stdout, чтобы заставить Rails4 работать на Heroku. В настоящее время мы работаем над сглаживанием процесса развертывания приложений Rails 4, но пока что вы может просто изменить эти строки в вашем коде, и вам не нужны эти драгоценные камни". (Спасибо Брет и Нил отличные новости)
В/config/environment/production. набор:
config.cache_classes = true
config.serve_static_files = true
config.assets.compile = true
config.assets.digest = true
Я не знаю о stdout в журнале, поэтому не могу этого проверить.
Сделайте git add. и git commit.
Убедитесь, что /config/database.yml имеет:
production:
adapter: postgresql
encoding: unicode
database: Your_appname_production
Вам понадобится эта информация для команды env ниже.
Удостоверьтесь, что у вас есть gem 'pg' для создания в вашем Gemfile
Сделайте еще один git commit.
Запустите эту команду в терминале в приложении в одной строке:
env RAILS_ENV=production DATABASE_URL=postgresql://user:[email protected]/Your_app_name_production bundle exec rake assets:precompile 2>&1
Где DATABASE_URL = postgresql идентичен вашему производственному адаптеру в файле yml
и Your_app_name_production указано, потому что Heroku только запускает производство.
Мне посоветовали и не нуждались:
group :production do
gem 'rails_log_stdout', github: 'heroku/rails_log_stdout'
gem 'rails3_serve_static_assets', github: 'heroku/rails3_serve_static_assets'
end
Это ошибки в установке пакета и Heroku.
Не знаю, помогает ли это, но я также добавил производство для
Bundler.require(*Rails.groups(assets: %w(development test production)))
Не помню, где я видел этот совет.
НТН
Арел
Ответ 2
Просто запустите bundle exec rake assets:precompile
, прежде чем нажимать на герою
Ответ 3
Я смог исправить эту проблему, добавив эти два камня в мое приложение
group :production do
gem 'rails_log_stdout', github: 'heroku/rails_log_stdout'
gem 'rails3_serve_static_assets', github: 'heroku/rails3_serve_static_assets'
end
Добавьте это, запустите bundle install
, а затем нажмите на герою.
Ваши стили должны начинаться с загрузки.
Ответ 4
Прежде всего, обновите бета-версию Rails до последней версии.
Проверьте, где вы можете установить config.assets.initialize_on_precompile = false
, поскольку это может привести к тому, что оно вернется к разрешению активов без звездочек (я предполагаю, что вы могли бы установить значение false при чтении о Rails 3.x на документах heroku).
Установите значение по умолчанию true
ruby
config.assets.initialize_on_precompile = true
Затем включите user-env-compile
для приложения на heroku:
# Enable precompile support for the app
heroku labs:enable user-env-compile
# Remove precompiled assets
rm -rf public/assets/
git add -u
git commit -m 'Remove precompiled assets'
# Now push and everything should just work from now on
git push heroku master
Адаптировано из этого комментария к вопросу о загрузке-загрузке.
Ответ 5
Задайте config.assets.compile=true
в файле /config/environments/production.rb
:
config.assets.compile=true
Нажмите здесь, чтобы узнать о конвейере активов.
Ответ 6
config.cache_classes = true
config.serve_static_assets = true
config.assets.compile = true
config.assets.digest = true
установка этих параметров в config/envirnoments/production.rb исправила аналогичную проблему для меня с сервером apache
Ответ 7
Я бы не установил config.assets.compile = true
, это повлияло на производительность (но оно работает).
Как указано здесь:
fooobar.com/questions/147614/...
When using the asset pipeline, paths to assets must be re-written and sass-rails provides -url and -path helpers (hyphenated in Sass, underscored in Ruby) for the following asset classes: image, font, video, audio, JavaScript and stylesheet.
image-url("rails.png") becomes url(/assets/rails.png)
image-path("rails.png") becomes "/assets/rails.png"
The more generic form can also be used but the asset path and class must both be specified:
asset-url("rails.png", image) becomes url(/assets/rails.png)
asset-path("rails.png", image) becomes "/assets/rails.png"
Ответ 8
Простой причиной этой героической проблемы может быть смешение типов файлов css. По моему собственному опыту это происходит, если вы выталкиваете папку с ресурсами, содержащую файлы типа .css и .scss. Может быть, кто-то еще может объяснить, почему это происходит... но все, что мне понадобилось, это переименовать .css файл в .scss. Затем все было правильно составлено, и все было правильно в мире.