Dziwny problem z Railsami 4 na Heroku. Podczas kompilacji obrazów dodawane są do nich skróty, ale odwołanie do tych plików z CSS nie ma poprawnej nazwy. Oto co mam na myśli. Mam plik o nazwie logo.png. Jednak gdy pojawia się na heroku, jest postrzegane jako:
/assets/logo-200a00a193ed5e297bb09ddd96afb953.png
Jednak CSS nadal stwierdza:
background-image:url("./logo.png");
Wynik: obraz nie wyświetla się. Ktoś na to wpadł? Jak można to rozwiązać?
ruby-on-rails
heroku
ruby-on-rails-4
Nick ONeill
źródło
źródło
Odpowiedzi:
Koła zębate wraz z Sassem mają sprytnych pomocników, których możesz użyć do wykonania zadania. Zębatki będzie jedynie przetwarzać te pomocników jeśli rozszerzenia plików stylów są albo
.css.scss
albo.css.sass
.Pomocnik specyficzny dla obrazu:
Pomocnik agnostyczny:
Lub jeśli chcesz osadzić dane obrazu w pliku css:
źródło
asset-data-url
działa dla mnie po zmianie pliku .css na plik .css.scss w aplikacji Rails 4. Dzięki!asset-data-url
ponieważ osadza cały plik w arkuszu stylów.sass-rails
ale w końcu skończyło się dodając rozszerzenie pliku.scss
do pliku przestępstwa .css (S) więc wszystko skończy się.css.scss
, a następnie zastąpić wszystkie wystąpieniaurl('blah.png')
zurl(asset-path('blah.png'))
(w moim przypadku wszystkie blah.pngs były w/vendor
ed teczka).asset-url($asset)
powinien być używany do kół łańcuchowych 3, wersja$asset-type
prawdopodobnie działa z niektórymi starszymi wersjamiNie wiem dlaczego, ale jedyną rzeczą, która pracowała dla mnie było za pomocą asset_path zamiast z IMAGE_PATH , chociaż moje obrazy są pod assets / images / katalogu:
Przykład:
W Ruby:
W .scss:
AKTUALIZACJA:
Zorientowałem się, że okazuje się, że ci pomocnicy zasobów pochodzą z klejnotu sass-rails (który zainstalowałem w moim projekcie).
źródło
background-image: url(asset-path('off.png'))
W Rails 4 możesz łatwo odwoływać się do obrazu znajdującego się
assets/images/
w twoich.SCSS
plikach:Po uruchomieniu aplikacji w trybie programowania (
localhost:3000
) powinieneś zobaczyć coś takiego:W trybie produkcyjnym Twoje zasoby będą miały numery pomocnicze pamięci podręcznej:
źródło
production.rb
.Haszowanie jest spowodowane tym, że potok zasobów i serwer Optymalizuj buforowanie http://guides.rubyonrails.org/asset_pipeline.html
Wypróbuj coś takiego:
Powodzenia
źródło
.css
mi nie działało.W css
chociaż oryginalna ścieżka to /assets/images/banner.jpg, zgodnie z konwencją musisz dodać po prostu / asset / w metodzie url
źródło
vendor/assets
,app/assets
,lib/assets
, etc) się połączyć w jedną aktywów folderze po ujmujący jest kompletny?/assets/banner.jpg
nie będą działać. Zamiast tego będzie to coś w rodzaju/assets/banner-f719451f1e0ddd15f153c4eedde044b2.jpg
. TL; DR Nie używaj tego.Żadna z odpowiedzi nie mówi o tym, w jaki sposób będę mieć
.css.erb
rozszerzenie, jak odwoływać się do obrazów . Dla mnie pracował zarówno w produkcji, jak i rozwoju :2.3.1 CSS i ERB
Potok zasobów automatycznie ocenia ERB . Oznacza to, że jeśli dodasz rozszerzenie erb do zasobu CSS (na przykład
application.css.erb
), wtedy pomocnicy tacyasset_path
są dostępni w twoich regułach CSS:Spowoduje to zapisanie ścieżki do konkretnego zasobu, do którego następuje odwołanie. W tym przykładzie sensowne byłoby posiadanie obrazu w jednej ze ścieżek ładowania zasobów, na przykład takiej
app/assets/images/image.png
, do której można by się tutaj odwoływać. Jeśli ten obraz jest już dostępnypublic/assets
jako plik odcisków palców, wówczas ścieżka jest przywoływana.Jeśli chcesz użyć identyfikatora URI danych - metody osadzania danych obrazu bezpośrednio w pliku CSS - możesz użyć
asset_data_uri
pomocnika.To wstawia poprawnie sformatowany identyfikator URI danych do źródła CSS.
Pamiętaj, że tag zamykający nie może mieć stylu -%>.
źródło
Tylko ten fragment kodu nie działa dla mnie:
Ale zmiana nazwy stylename.scss na stylename.css.scss pomaga mi.
źródło
Odwołując się do dokumentów Railsów , widzimy, że istnieje kilka sposobów na linkowanie do obrazów z css. Wystarczy przejść do sekcji 2.3.2.
Po pierwsze, upewnij się, że plik css ma rozszerzenie .scss, jeśli jest to plik sass.
Następnie możesz użyć metody ruby, która jest naprawdę brzydka:
Lub możesz użyć konkretnego formularza, który jest ładniejszy:
Na koniec możesz użyć formularza ogólnego:
źródło
CO ZNALAZŁEM PO GODZINACH MUCKINGU TO:
PRACUJE :
Powyższe dane wyjściowe wyglądają następująco:
"/assets/transparent_2x2-ec47061dbe4fb88d51ae1e7f41a146db.png"
Zwróć uwagę na wiodące „/” i jest ono w cudzysłowie . Zwróć również uwagę na rozszerzenie scss i pomocnika image_path w pliku yourstylesheet.css.scss. Obraz znajduje się w katalogu app / asset / images .
Nie działa:
nie działa, nieprawidłowa właściwość:
Moją ostatnią deską ratunku było umieszczenie ich w moim publicznym wiaderku s3 i załadowanie stamtąd, ale w końcu coś się zaczęło.
źródło
Co ciekawe, jeśli użyję „obrazu tła”, to nie działa:
Ale po prostu „tło”:
źródło
W niektórych przypadkach mogą być również stosowane następujące aplikacje
logo {background: url (<% = asset_data_uri 'logo.png'%>)}
Źródło: http://guides.rubyonrails.org/asset_pipeline.html
źródło
Podczas korzystania z klejnotów „sass-rails” w Rails 5, bootstrap 4, działało dla mnie:
w pliku .scss:
w pliku widoku (np. .html.slim):
źródło
To powinno cię tam zabrać za każdym razem.
źródło
Domyślnie Rails 4 nie obsługuje twoich zasobów. Aby włączyć tę funkcję, musisz przejść do config / application.rb i dodać ten wiersz:
https://devcenter.heroku.com/articles/rails-4-asset-pipeline#serve-assets
źródło
W Rails 4 po prostu użyj
.hero { background-image: url("picture.jpg"); }
źródło
Możesz dodać do swojego rozszerzenia css .erb. Ej: style.css.erb
Następnie możesz umieścić:
źródło
To działało dla mnie:
źródło