8

問題

Rails 3.0.4 アプリを持っており、Railscast ビデオの「Upgrading to rails 3.1」に従って 3.1.4 にアップグレードします。

アセットが解決されていないため、アセットに問題があり、サーバーログに次のようなメッセージが表示されます。

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"):

これらのファイルは次のassetsディレクトリにあります。

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

これが含まれています:

$ 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 .
*/

すべてが設定されていると思います。ここにいくつかのファイルのチャンクを置きます:

  • Gemfileには、必要なアセット gem が含まれています:

    group :assets do
      gem 'sass-rails', '~> 3.1.3'
      gem 'coffee-rails', '~> 3.1.0'
      gem 'uglifier'
    end
    
  • application.rb、アセットが有効になっています:

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

    config.assets.compress = false
    config.assets.debug = true
    
  • 最後に...application.html.erbレイアウト:

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

ステージ

現在開発環境にいます。

テスト

  1. をリクエストhttp://localhost:3000/assets/images/rails.pngすると がスローさNo route matches [GET] "/assets/images/rails.png"れますが、ファイルはそこにあります:

    $ ls app/assets/images/rails.png 
    app/assets/images/rails.png
    
  2. それから私は実行し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
    

    次に、サーバーを実行し ( rails s)、イメージを再度要求します ( 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)
    

それで、何が問題なのですか?、私は何か間違っていますか?

4

1 に答える 1

2

私が知る限り、すべてのプリコンパイル済みアセットは assets フォルダーに移動されます。

つまり、javascript、スタイルシート、および画像のコンテンツが に結合されlocalhost:3000/assetsます。

したがって、検索する localhost:3000/assets/images/rails.png と、 にあるはずです app/assets/images/images/rails.png。そのため、404 です。

ディレクトリをきれいに保つために、すべての画像を app/assets/images/ に保存し、それらを次のように指定することをお勧めしますasset_path('rails.png')

于 2012-08-14T12:50:48.257 に答える