2012-04-08 32 views
9

Vấn đềRails 3.1 tài sản không giải quyết

Tôi có một Rails 3.0.4 ứng dụng mà tôi nâng cấp lên 3.1.4 hướng dẫn sau đây từ Railscast video: "Upgrading to rails 3.1".

Bây giờ tôi có vấn đề với tài sản vì họ không được giải quyết, cho thông điệp trong nhật ký máy chủ như thế này:

Started GET "/assets/application.css" for 127.0.0.1 at 2012-04-08 03:57:13 -0500 
Served asset /application.css - 404 Not Found (15ms) 

ActionController::RoutingError (No route matches [GET] "/assets/application.css"): 
Rendered /usr/local/rvm/gems/ruby-1.9.2-p318/gems/actionpack-3.1.4/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (14.3ms) 

Started GET "/assets/application.js" for 127.0.0.1 at 2012-04-08 03:57:13 -0500 
Served asset /application.js - 404 Not Found (35ms) 

ActionController::RoutingError (No route matches [GET] "/assets/application.js"): 

Những tập tin này trong assets thư mục:

$ ls app/assets/*/application* 
app/assets/javascripts/application.js app/assets/stylesheets/application.css 

và chứa nội dung này:

$ cat app/assets/javascripts/application.js 
//= require jquery 
//= require jquery_ujs 
//= require_self 
//= require_tree . 
$ cat app/assets/stylesheets/application.css 
/* 
*= require_self 
*= require_tree . 
*/ 

Tôi cho rằng mọi thứ đã được định cấu hình. Ở đây tôi đặt một số khối của tập tin:

  • Gemfile, chứa tài sản đá quý cần:

    group :assets do 
        gem 'sass-rails', '~> 3.1.3' 
        gem 'coffee-rails', '~> 3.1.0' 
        gem 'uglifier' 
    end 
    
  • application.rb, có tài sản được kích hoạt:

    config.assets.enabled = true 
    config.assets.version = '1.0' 
    
  • development.rb:

    config.assets.compress = false 
    config.assets.debug = true 
    
  • cuối cùng ... application.html.erb bố trí:

    <%= stylesheet_link_tag 'application' %> 
    <%= javascript_include_tag 'application' %> 
    

Stage

Tôi bây giờ trong phát triển môi trường.

thử nghiệm

  1. Nếu tôi yêu cầu http://localhost:3000/assets/images/rails.png, nó ném No route matches [GET] "/assets/images/rails.png", nhưng tập tin là có:

    $ ls app/assets/images/rails.png 
    app/assets/images/rails.png 
    
  2. Sau đó, tôi thực hiện rake assets:precompile:

    $ bundle exec rake assets:precompile 
    /usr/local/rvm/rubies/ruby-1.9.2-p318/bin/ruby /usr/local/rvm/gems/ruby-1.9.2-p318/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets 
    /usr/local/rvm/rubies/ruby-1.9.2-p318/bin/ruby /usr/local/rvm/gems/ruby-1.9.2-p318/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets 
    

    Các n, thực máy chủ (rails s) và yêu cầu một lần nữa một hình ảnh (rails.png):

    $ rails s 
    => Booting WEBrick 
    => Rails 3.1.4 application starting in development on http://0.0.0.0:3000 
    => Call with -d to detach 
    => Ctrl-C to shutdown server 
    /usr/local/rvm/gems/ruby-1.9.2-p318/gems/actionpack-3.1.4/lib/action_dispatch/http/mime_type.rb:101: warning: already initialized constant PDF 
    [2012-04-08 04:53:06] INFO WEBrick 1.3.1 
    [2012-04-08 04:53:06] INFO ruby 1.9.2 (2012-02-14) [i686-linux] 
    [2012-04-08 04:53:06] INFO WEBrick::HTTPServer#start: pid=16702 port=3000 
    
    Started GET "/assets/images/rails.png" for 127.0.0.1 at 2012-04-08 04:53:14 -0500 
    Served asset /images/rails.png - 404 Not Found (38ms) 
    
    ActionController::RoutingError (No route matches [GET] "/assets/images/rails.png"): 
    
    Rendered /usr/local/rvm/gems/ruby-1.9.2-p318/gems/actionpack-3.1.4/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (125.2ms) 
    

Vì vậy Có chuyện gì vậy?, Tôi có làm gì sai không?

+0

Đây có phải là duy nhất trong chế độ sản xuất? Bạn có chạy 'bundle exec rake assets: precompile' không? Ngoài ra, bạn có thư viện sprockets bao gồm? – pjumble

+0

@pjumble Chưa, đó có cần thiết ngay cả khi tôi đang trong môi trường phát triển? – Israel

+4

Tôi cho rằng bạn đang ở chế độ sản xuất, nhưng không, trong chế độ phát triển bạn không phải biên dịch trước tài sản. Nếu bạn xóa '/ images /' khỏi URL thì ảnh có hoạt động không? ('http: // localhost: 3000/assets/rails.png') – pjumble

Trả lời

2

Theo như tôi biết tất cả các tài sản biên dịch trước được chuyển đến thư mục nội dung.

Điều đó có nghĩa là nội dung của javascript, biểu định kiểu và hình ảnh sẽ được kết hợp trong localhost:3000/assets.

Vì vậy, nếu bạn tìm kiếm localhost:3000/assets/images/rails.png nó nên được đặt trong app/assets/images/images/rails.png. Therefor các 404.

Để giữ cho thư mục của bạn sạch Tôi đề nghị giữ lại tất cả hình ảnh của bạn trong ứng dụng/tài sản/images/và trỏ đến chúng với asset_path('rails.png')

Các vấn đề liên quan