2013-08-31 24 views
15

Tôi đang cố gắng sử dụng tệp âm thanh trong đường ray. Tôi đã tạo một thư mục audios trong số app\assets\. Tôi muốn sử dụng tài sản tiền biên dịch vì vậy mà tôi không cần phải đặt các tập tin dưới app\publicNội dung âm thanh trong Rails mang lại Không có kết quả phù hợp với tuyến đường

Ngay bây giờ tôi nhận được

ActionController::RoutingError (No route matches [GET] "/audios/audio_file.wav") 

Nếu tôi thay đổi url URL/audios/audio_file.wav-URL/assets/audio_file.wav nó hoạt động. Làm cách nào để khắc phục sự cố? Cách đúng là gì?

Trả lời

21

Trước tiên, trong trường hợp bạn không nhận ra nó: thư mục app/assets/audios mới của bạn đã có trong đường dẫn tải ... bạn chỉ cần khởi động lại máy chủ của bạn cho Sprockets để nhặt nó lên.

Trong phát triển, nội dung có sẵn tại url tương đối: /assets/<asset file name>. Ví dụ: giả sử tệp wav của bạn nằm ở số /app/assets/audios/audio_file.wav trong hệ thống tệp, nó có thể truy cập được tại url tương đối /assets/audio_file.wav trong trình duyệt. Điều này là do Sprockets/Dev-Rails biết tìm kiếm thư mục /app/assets và các thư mục con của nó khi định vị tài sản.

Trong sản xuất, việc biên dịch tài sản (thường) xảy ra khi triển khai. Tại thời điểm này, tệp wav của bạn được sao chép sang ví dụ: /public/assets/audio_file-<MD5 fingerprint>.wav và có thể truy cập tại url tương đối: /assets/audio_file-<MD5 fingerprint>.wav.

Vì các kiểu đặt tên khác nhau được sử dụng giữa phát triển và sản xuất, bất cứ lúc nào bạn muốn tham chiếu đến nội dung, bạn nên sử dụng phương thức trợ giúp (ngay cả trong CSS!). Đó là, sản xuất bao gồm dấu vân tay MD5, trong khi phát triển thì không. Nhưng bạn không cần phải lo lắng về bất cứ rằng chừng nào bạn sử dụng một helper:

  • Đối với hình ảnh: <%= image_tag('homes/logo.png') %> - đưa ra một tập tin hình ảnh sống trong /app/assets/images/homes/logo.png trên hệ thống tập tin.
  • Đối với nội dung không chuẩn, chẳng hạn như tệp âm thanh: <%= asset_path('audio_file.wav') %>, sẽ tạo ra đường dẫn tương đối là /assets/audio_file.wav.