Há um problema estranho com o Rails 4 no Heroku. Quando as imagens são compiladas, eles adicionam hashes, mas a referência a esses arquivos no CSS não tem o nome adequado ajustado. Aqui está o que eu quero dizer. Eu tenho um arquivo chamado logo.png. No entanto, quando aparece no heroku, é visto como:
/assets/logo-200a00a193ed5e297bb09ddd96afb953.png
No entanto, o CSS ainda afirma:
background-image:url("./logo.png");
O resultado: a imagem não é exibida. Alguém encontrou isso? Como isso pode ser resolvido?
ruby-on-rails
heroku
ruby-on-rails-4
Nick ONeill
fonte
fonte
Respostas:
As rodas dentadas, juntamente com Sass, têm alguns ajudantes bacanas que você pode usar para fazer o trabalho. Rodas dentadas será única processar esses ajudantes se suas extensões de arquivo de estilo ou são
.css.scss
ou.css.sass
.Auxiliar específico da imagem:
Auxiliar agnóstico:
Ou se você deseja incorporar os dados da imagem no arquivo css:
fonte
asset-data-url
funciona para mim depois que alterei meu arquivo .css para o arquivo .css.scss em um aplicativo do Rails 4. Obrigado!asset-data-url
pois incorpora o arquivo inteiro na folha de estilo.sass-rails
, finalmente acabei adicionando a extensão.scss
ao (s) arquivo (s) .css ofensivos, para que todos terminem.css.scss
e substituam todas as instâncias deurl('blah.png')
withurl(asset-path('blah.png'))
(no meu caso, todos os blah.pngs estavam em um/vendor
ed pasta).asset-url($asset)
deve ser usado para rodas dentadas 3, a versão com$asset-type
provavelmente funciona com alguma versão mais antigaNão sei por que, mas a única coisa que funcionou para mim foi usar asset_path em vez de image_path , mesmo que minhas imagens estejam no diretório assets / images / :
Exemplo:
Em Ruby:
Em .scss:
ATUALIZAR:
Achei que esses auxiliares de recursos provêm da gema sass-rails (que eu havia instalado no meu projeto).
fonte
background-image: url(asset-path('off.png'))
No Rails 4, você pode fazer referência a uma imagem localizada
assets/images/
nos seus.SCSS
arquivos facilmente desta forma:Ao iniciar o aplicativo no modo de desenvolvimento (
localhost:3000
), você verá algo como:No modo de produção, seus ativos terão os números auxiliares de cache:
fonte
production.rb
.O hash ocorre porque o pipeline de ativos e o servidor Optimize caching http://guides.rubyonrails.org/asset_pipeline.html
Tente algo como isto:
Boa sorte
fonte
.css
não funcionou para mim.Em css
embora o caminho original seja /assets/images/banner.jpg, por convenção, você deve adicionar apenas / assets / no método url
fonte
vendor/assets
,app/assets
,lib/assets
, etc) se combinados em um único ativo pasta após prepossessing está completa?/assets/banner.jpg
não funciona. Em vez disso, será algo parecido/assets/banner-f719451f1e0ddd15f153c4eedde044b2.jpg
. TL; DR Não use isso.Nenhuma das respostas diz sobre o caminho, quando terei
.css.erb
extensão, como fazer referência a imagens . Para mim, trabalhei tanto na produção quanto no desenvolvimento :2.3.1 CSS e ERB
O pipeline de ativos avalia automaticamente o ERB . Isso significa que, se você adicionar uma extensão erb a um ativo CSS (por exemplo
application.css.erb
), auxiliares comoasset_path
estão disponíveis nas suas regras CSS:Isso grava o caminho para o ativo específico que está sendo referenciado. Neste exemplo, faria sentido ter uma imagem em um dos caminhos de carregamento de ativos, como
app/assets/images/image.png
, que seria referenciado aqui. Se essa imagem já estiver disponívelpublic/assets
como um arquivo com impressão digital, esse caminho será referenciado.Se você deseja usar um URI de dados - um método para incorporar os dados da imagem diretamente no arquivo CSS - você pode usar o
asset_data_uri
auxiliar.Isso insere um URI de dados formatado corretamente na fonte CSS.
Observe que a tag de fechamento não pode ser do estilo -%>.
fonte
Somente este trecho não funciona para mim:
Mas renomear stylename.scss para stylename.css.scss me ajuda.
fonte
Fazendo referência aos documentos do Rails , vemos que existem algumas maneiras de vincular imagens a partir de css. Basta ir para a seção 2.3.2.
Primeiro, verifique se o seu arquivo css tem a extensão .scss, se for um arquivo sass.
Em seguida, você pode usar o método ruby, que é realmente feio:
Ou você pode usar o formulário específico mais agradável:
Por fim, você pode usar o formulário geral:
fonte
O QUE EU ENCONTREI APÓS HORAS DE MUCKING COM ESTE:
TRABALHO :
O resultado acima gera algo como:
"/assets/transparent_2x2-ec47061dbe4fb88d51ae1e7f41a146db.png"
Observe o "/" inicial e está entre aspas . Observe também a extensão scss e o auxiliar image_path em yourstylesheet.css.scss. A imagem está no diretório app / assets / images .
Não funciona:
não funciona, propriedade inválida:
Meu último recurso seria colocá-los no meu balde público s3 e carregar a partir daí, mas finalmente consegui algo.
fonte
Curiosamente, se eu usar 'background-image', ele não funcionará:
Mas apenas 'background', ele faz:
fonte
Em alguns casos, o seguinte também pode ser aplicado
logo {background: url (<% = asset_data_uri 'logo.png'%>)}
Fonte: http://guides.rubyonrails.org/asset_pipeline.html
fonte
Ao usar o gem 'sass-rails', no Rails 5, bootstrap 4, o seguinte funcionou para mim,
no arquivo .scss:
no arquivo de visualização (por exemplo, .html.slim):
fonte
Isso deve levá-lo lá todas as vezes.
fonte
Por padrão, o Rails 4 não servirá seus ativos. Para habilitar essa funcionalidade, você precisa acessar o config / application.rb e adicionar esta linha:
https://devcenter.heroku.com/articles/rails-4-asset-pipeline#serve-assets
fonte
No Rails 4, basta usar
.hero { background-image: url("picture.jpg"); }
fonte
Você pode adicionar à sua extensão css .erb. Ej: style.css.erb
Então você pode colocar:
fonte
Isso funcionou para mim:
fonte