Rails 3.1 및 이미지 자산


156

관리자라는 폴더의 자산 폴더에 관리자 테마에 대한 모든 이미지를 넣었습니다. 그런 다음 정상적인 것처럼 연결합니다.

# Ruby    
image_tag "admin/file.jpg" .....
#CSS
.logo{ background:url('/assets/images/admin/logo.png');

참고로 테스트를 위해 자산을 컴파일하지 않았기 때문에 아직 asset_path 태그를 사용하지 않습니다.

이미지를 업데이트하기로 결정하기 전까지는 모든 것이 좋습니다. 일부 색상을 교체했지만 다시로드하면 새 스타일 이미지가 표시되지 않습니다. 브라우저에서 이미지를 직접 보면 여전히 오래된 이미지가 표시됩니다. 한 단계 더 나아가서 나는 관리 이미지 폴더를 파괴했습니다. 그러나 여전히 모든 이미지가 표시되지 않습니다. 그리고 네 캐시를 지우고 여러 브라우저에서 시도했습니다.

어떤 종류의 이미지 캐싱이 진행되고 있습니까? 이것은 pow를 사용하여 페이지를 제공하는 로컬 개발입니다.

전체 이미지 폴더를 파괴하더라도 이미지가 계속 제공됩니다.

뭔가 빠졌습니까?


2
3.1 자산 파이프 라인을 사용하는 경우에는 그렇지 않습니다. rake assets : precompile 명령을 사용하면 해당 파일을 압축하여 공개 파일로 옮길 수 있습니다.
Lee

2
그것들을 공용 폴더로 옮기는 것은 효과가 있었지만 자산 폴더에서 잘 작동하면서 약간 이상했습니다. 3.1에서 더 많은 문서를 기다려야 할 수도 있습니다.
Lee

3
나는 당신의 좌절감을 이해합니다. 분명히 릴리스 후보는 잘 문서화되지 않습니다.
tybro0103

1
폴더 경로를 포함하지 말고 자산에 그대로 두십시오. 아래 답변을 참조하십시오.
Andrew

답변:


226

3.1에서는 경로의 '이미지'부분을 제거합니다. 따라서이 /assets/images/example.pngURL에서 요청을 받으면 실제로 이미지에 액세스 할 수 있습니다./assets/example.png

assets/images폴더가 새로운 3.1 앱과 함께 생성 되기 때문에 이는 사용자가 따르기를 원하는 규칙입니다. 나는 그것이 image_tag그것을 찾을 곳이라고 생각 하지만, 아직 테스트하지 않았습니다.

또한 RailsConf 기조 연설에서 D2h public folder가 더 이상 많은 것을 가져서는 안되며 주로 오류 페이지와 파비콘 이라고 말한 것을 기억 합니다.


예, 나는이 할당량을 가지고 놀았으며 더 쉽게 만들 수있는 방법이 있습니다. 예, 내 자산 폴더에 넣으면 자산 태그를 사용할 수 있습니다. 그래서 더 많은 정보가 나오는 것을 기다리고 있습니다.
Lee

1
고마워, 나도 많은 도움이되었습니다. 이것은 다른 웹 개발 프레임 워크에서 나온 Rails를 배우려는 친구로서 미치게 만드는 종류의 것입니다.
jn29098

6
두 개의 다른 폴더에 동일한 파일 이름이 포함되어 있으면 어떻게됩니까?
Hady Elsahar

6
DH2가 아니어야합니까?
Tiago Franco

1
왜 그들이 이미 일한 것을 바꿔야하는지 확실하지 않습니다.
Tastybrownies

98

당신은에서 CSS 파일의 확장자를 변경 할 수 있습니다 .css.scss.css.scss.erb및 수행

background-image:url(<%=asset_path "admin/logo.png"%>);

변경 사항을 보려면 "하드 새로 고침"을 수행해야 할 수도 있습니다. OSX 브라우저에서 CMD + SHIFT + R

생산 과정에서

rm -rf public/assets    
bundle exec rake assets:precompile RAILS_ENV=production

배포시 발생합니다.


44
sass에 새로운 이미지 헬퍼가 있습니다 : image_url , image_path, ... 더 많은 정보는 here : edgeguides.rubyonrails.org/asset_pipeline.html 더 이상 erb를 프리 프로세서로 사용할 필요가 없습니다
Martin Wawrusch

1
sass-rails 도우미 (image_url 및 image-url)를 css.scss 파일로 시도했지만 해석되지 않는 것 같습니다. 어떤 단서?
invaino

2
생성 된 scss 파일의 이름은 기본적으로 .css.scss입니다. 아직 침대에
흘림

2
어떤 이유로 image-url이 작동하지 않았지만 asset-url ( 'myimage.png', image)이 완벽하게 작동했습니다. (Rails 3.1)
Elad

1
경우 3.0에서 사람의 업그레이드 방금에서 스타일 시트 이름을 바꿀 수 있습니다, 궁금해 .css.css.erb에 당신이 그들을 이동 한 후 ( app/assets말대꾸하지 않고 ERB 처리를 얻을 수 있습니다.
윌리엄 Denniss

22

그만한 가치가 있기 때문에 내가 이것을했을 때 css 파일의 경로에 폴더가 포함되어 있지 않아야한다는 것을 알았습니다. 예를 들어 가지고 있다면 app/assets/images/example.png이것을 CSS 파일에 넣습니다 ...

div.example { background: url('example.png'); }

... 어쨌든 그것은 마술처럼 작동합니다. 나는 rake assets:precompile모든로드 경로에서 모든 것을 빨아 들여 정크 서랍 폴더에 덤프 하는 작업 을 실행하여 이것을 알아 냈습니다 public/assets. 아이러니 한 IMO ...

어쨌든 이것은 폴더 경로를 넣을 필요가 없다는 것을 의미하며 자산 폴더의 모든 것이 하나의 거대한 디렉토리에있게됩니다. 이 시스템이 파일 이름 충돌을 해결하는 방법은 확실하지 않으므로주의해야합니다.

좌절의 종류가 큰 변화에 대한 더 나은 문서가 없습니다.


3
이름 충돌이있을 때 config.assets.paths 배열에 나타나는 첫 번째 경로는 선택된 파일입니다. asset_path()헬퍼 를 사용 하고 디렉토리를 지정하면 이를 피할 수 있습니다 .
Joseph Ravenwolfe

6
CSS 파일과 이미지가 같은 위치에 있기 때문에 "마법으로 작동"합니다. CSS 파일 참조는 CSS 파일의 위치와 관련이 있습니다.
Bill Leeper

자산 파이프 라인은 특히 프론트 엔드 개발자에게 약간의 블랙 박스가 될 수 있지만 파일 경로 및 자동 캐시 버스 팅에 대해 걱정할 필요가없는 것과 같은 많은 훌륭한 기능을 제공합니다.
Miles

16

rails 4에서는 CSS 및 SAS 도우미 이미지 URL을 사용할 수 있습니다.

div.logo {background-image: image-url("logo.png");}

배경 이미지가 표시되지 않으면 스타일 시트에서 이미지를 참조하는 방법을 살펴보십시오.


1
이것은 정확합니다 (레일 4의 경우). 이 답변에 투표하십시오!
ahnbizcad

Rails는 url 키워드와 문자열을 넣어서 '도움을줍니다'. 이것은 당신이 같은 일을 할 수 있다는 것을 의미합니다. div.logo {background: image-url("logo.png") no-repeat center;}
Antony Denyer

10

CSS 또는 IMG 태그에서 이미지를 참조 할 때는 image-name.jpg를 사용하십시오.

이미지는 실제로 ./assets/images/image-name.jpg 아래에 있습니다.


CSS에 관해서는 이것이 잘못이라고 생각합니다-레일을 사용할 때 rails 3.1.0.rc4를 사용 background: url('sort_asc_disabled.png')하면 app / assets / images / sort_asc_disabled.png 파일에서 작동합니다.
wonderfulthunk

2

http://railscasts.com/episodes/279-understanding-the-asset-pipeline

이 레일 캐스트 (자산 파이프 라인의 레일 튜토리얼 비디오)는 자산 파이프 라인의 경로를 설명하는 데 많은 도움이됩니다. 나는 그것이 꽤 유용하다는 것을 알았고 실제로 몇 번 보았습니다.

내가 선택한 솔루션은 위의 @Lee McAlilly이지만이 레일 캐스트는 왜 그것이 작동하는지 이해하는 데 도움이되었습니다. 그것이 도움이되기를 바랍니다!


0

레일의 자산 파이프 라인은이 정확한 방법을 제공합니다.

CSS 또는 scss 파일에 image_path ( 'image filename')를 추가하기 만하면 rails가 모든 것을 처리합니다. 예를 들면 다음과 같습니다.

.logo{ background:url(image_path('admin/logo.png'));

(.erb보기와 동일하게 작동하며 경로에 "/ assets"또는 "/ assets / images"를 사용하지 않습니다)

Rails는 다른 헬퍼 메소드도 제공합니다. 또 다른 답변이 있습니다 : Rails 3.1을 사용할 때 Sass에서 참조 이미지를 어떻게 사용합니까?


나는이 질문이 몇 살이라는 것을 알고 있지만 이것은 이것을 검색 할 때 Google에서 처음 발견 한 페이지이므로 다른 사람들이 쉽게 이것을 참조 할 수 있도록 답변을 선택하는 것이 좋습니다!
benrugg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.