Rails: jak odwoływać się do obrazów w CSS w Rails 4
Jest dziwny problem z Rails 4 na Heroku. Gdy obrazy są kompilowane, dodawane są do nich skróty, jednak odniesienia do tych plików z CSS nie mają dostosowanej właściwej nazwy. Oto co mam na myśli. Mam plik o nazwie logo.png. Jednak kiedy pojawia się na heroku, jest postrzegany jako:
/assets/logo-200a00a193ed5e297bb09ddd96afb953.png
Jednak CSS nadal stwierdza:
background-image:url("./logo.png");
Wynik: obraz nie jest wyświetlany. Ktoś na to wpadł? Jak można to rozwiązać?
17 answers
Sprockets wraz z Sass ma kilka sprytnych pomocników można użyć, aby wykonać zadanie. Sprockets będzie tylko przetwarzać te helpery, jeśli rozszerzenia plików arkusza stylów są .css.scss
lub .css.sass
.
Pomocnik specyficzny dla obrazu:
background-image: image-url("logo.png")
Agnostic helper:
background-image: asset-url("logo.png", image)
background-image: asset-url($asset, $asset-type)
Lub jeśli chcesz osadzić dane obrazu w pliku css:
background-image: asset-data-url("logo.png")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-14 19:02:08
Nie wiem dlaczego, ale jedyną rzeczą, która działała dla mnie było użycie asset_path zamiast z image_path , mimo że moje obrazy znajdują się w kataloguassets/images/:
Przykład:
app/assets/images/mypic.png
W Ruby:
asset_path('mypic.png')
Do środka .scss:
url(asset-path('mypic.png'))
UPDATE:
Zorientowałem się - okazuje się, że pomocnicy aktywów pochodzą z sass-rails gem (który zainstalowałem w moim projekt).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-23 18:28:53
W Rails 4 możesz łatwo odwoływać się do obrazu znajdującego się w assets/images/
w Twoich plikach .SCSS
w następujący sposób:
.some-div {
background-image: url(image-path('pretty-background-image.jpg'));
}
Po uruchomieniu aplikacji w trybie deweloperskim (localhost:3000
) powinieneś zobaczyć coś w stylu:
background-image: url("/assets/pretty-background-image.jpg");
W trybie produkcyjnym twoje zasoby będą miały numery pomocnicze pamięci podręcznej:
background-image: url("/assets/pretty-background-image-8b313354987c309e3cd76eabdb376c1e.jpg");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-24 15:56:20
Hash jest spowodowany tym, że rurociąg zasobów i serwer optymalizują buforowanie http://guides.rubyonrails.org/asset_pipeline.html
Spróbuj czegoś takiego:
background-image: url(image_path('check.png'));
Goodluck
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-23 20:55:46
W css
background: url("/assets/banner.jpg");
Chociaż oryginalną ścieżką jest / assets / images / banner.jpg, zgodnie z konwencją musisz dodać just / assets / w metodzie url
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-19 06:23:57
Żadna z odpowiedzi nie mówi o sposobie, kiedy będę miał .css.erb
rozszerzenie, jak odwołać obrazy . Dla mnie pracował zarówno w produkcji i rozwoju jak również:
Potoku zasobów automatycznie ocenia ERB . Oznacza to, że jeśli dodasz rozszerzenie erb do zasobu CSS (na przykład application.css.erb
), to helpery takie jak asset_path
są dostępne w Twoich regułach CSS:
.class { background-image: url(<%= asset_path 'image.png' %>) }
To zapisuje ścieżkę do konkretnego składnika aktywów, do którego się odwołuje. W tym przykładzie sensowne byłoby umieszczenie obrazu w jednej ze ścieżek ładowania zasobu, np. app/assets/images/image.png
, do której się tutaj odwołujemy. Jeśli ten obraz jest już dostępny w public/assets
jako plik z odciskami palców, to ta ścieżka jest odwoływana.
Jeśli chcesz użyć data URI - metody osadzania danych obrazu bezpośrednio w pliku CSS - możesz użyć helpera asset_data_uri
.
.logo { background: url(<%= asset_data_uri 'logo.png' %>) }
Wstawia poprawnie sformatowany URI danych do Źródło CSS.
zauważ, że znacznik zamykający nie może być w stylu -%>.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-15 16:26:12
Tylko ten fragment mi nie działa:
background-image: url(image_path('transparent_2x2.png'));
Ale zmień nazwę nazwa_pliku.scss do stylename.css.scss mi pomaga.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-24 06:46:22
Odwołując się do rails documents widzimy, że istnieje kilka sposobów łączenia obrazów z css. Wystarczy przejść do sekcji 2.3.2.
Najpierw 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:
#logo { background: url(<%= asset_data_uri 'logo.png' %>) }
Lub możesz użyć konkretnej formy, która jest ładniejsza:
image-url("rails.png") returns url(/assets/rails.png)
image-path("rails.png") returns "/assets/rails.png"
Na koniec możesz użyć ogólnej formy:
asset-url("rails.png") returns url(/assets/rails.png)
asset-path("rails.png") returns "/assets/rails.png"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-05 19:47:58
CO ZNALAZŁEM PO GODZINACH MUCKING Z TYM:
Działa:
background-image: url(image_path('transparent_2x2.png'));
// how to add attributes like repeat, center, fixed?
Powyższe wypisuje coś w rodzaju: "/assets/transparent_2x2-ec47061dbe4fb88d51ae1e7f41a146db.png"
Zwróć uwagę na prowadzący " / " i znajduje się w cudzysłowach. Zwróć również uwagę na rozszerzenie scss i helper image_path W yourstylesheet.css.scss. Obraz znajduje się w katalogu app/assets / images .
Nie działa:
background: url(image_path('transparent_2x2.png') repeat center center fixed;
Nie działa, nieprawidłowa właściwość:
background:url(/assets/pretty_photo/default/sprite.png) 2px 1px repeat center fixed;
Moja ostatnia deska ratunku miała być do włóż je do mojego publicznego wiadra s3 i załaduj stamtąd, ale w końcu coś się dzieje.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-20 19:18:00
Co ciekawe, jeśli używam 'background-image', to nie działa:
background-image: url('picture.png');
Ale tylko "tło", to robi:
background: url('picture.png');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-22 00:45:06
W niektórych przypadkach może być również applier
Logo { background: url ()}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
Przy użyciu gem 'Sass-rails', w Rails 5, bootstrap 4, zadziałało dla mnie,
W .plik scss:
background-image: url(asset_path("black_left_arrow.svg"));
W pliku widoku (np.html.slim): {]}
style=("background-image: url(#{ show_image_path("event_background.png") })");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-28 06:22:09
To powinno cię tam za każdym razem.
background-image: url(<%= asset_data_uri 'transparent_2x2.png'%>);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-14 13:50:57
Domyślnie Rails 4 nie będzie obsługiwał Twoich zasobów. Aby włączyć tę funkcjonalność należy wejść do config/application.rb i dodaj ten wiersz:
config.serve_static_assets = true
Https://devcenter.heroku.com/articles/rails-4-asset-pipeline#serve-assets
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-31 19:22:55
W Rails 4 po prostu użyj
.hero {
background-image: url("picture.jpg");
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-20 23:04:07
Możesz dodać do swojego css .rozszerzenie erb. Ej: styl.css.erb
Wtedy można umieścić:
background: url(<%= asset_path 'logo.png' %>) no-repeat;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-22 05:12:03
To mi pomogło:
background: #4C2516 url('imagename.png') repeat-y 0 0;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-13 15:26:37