2011-10-03 123 views
0

我正在通過Michael Hartl Rails 3教程開展工作,目前我正在開發第3章。本教程要求我生成一個頁面控制器,其中包含主頁和聯繫人的操作頁面使用命令行:「$ rails generate controller頁面主頁聯繫人」。無法在Rails 3教程中生成頁面控制器

這是輸出我得到:

ruby 1.9.2p290 (2011-07-09) [i386-mingw32] 

C:\Users\abcd\rails_projects2\sample_app>rails generate controller Pages home 
contact 
C:/Users/abcd/rails_projects2/sample_app/config/application.rb:8:in `require': 
no such file to load -- sprockets/railtie (LoadError) 
     from C:/Users/abcd/rails_projects2/sample_app/config/application.rb:8: 
in `<top (required)>' 
     from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/comman 
ds.rb:15:in `require' 
     from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/comman 
ds.rb:15:in `<top (required)>' 
     from script/rails:6:in `require' 
     from script/rails:6:in `<main>' 

我的config/application.rb中文件的內容:

require File.expand_path('../boot', __FILE__) 

# Pick the frameworks you want: 
require "active_record/railtie" 
require "action_controller/railtie" 
require "action_mailer/railtie" 
require "active_resource/railtie" 
require "sprockets/railtie" 
# require "rails/test_unit/railtie" 

if defined?(Bundler) 
    # If you precompile assets before deploying to production, use this line 
    Bundler.require *Rails.groups(:assets => %w(development test)) 
    # If you want your assets lazily compiled in production, use this line 
    # Bundler.require(:default, :assets, Rails.env) 
end 

module SampleApp 
    class Application < Rails::Application 
    # Settings in config/environments/* take precedence over those specified here. 
    # Application configuration should go into files in config/initializers 
    # -- all .rb files in that directory are automatically loaded. 

    # Custom directories with classes and modules you want to be autoloadable. 
    # config.autoload_paths += %W(#{config.root}/extras) 

    # Only load the plugins named here, in the order given (default is alphabetical). 
    # :all can be used as a placeholder for all plugins not explicitly named. 
    # config.plugins = [ :exception_notification, :ssl_requirement, :all ] 

    # Activate observers that should always be running. 
    # config.active_record.observers = :cacher, :garbage_collector, :forum_observer 

    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. 
    # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. 
    # config.time_zone = 'Central Time (US & Canada)' 

    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. 
    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] 
    # config.i18n.default_locale = :de 

    # Configure the default encoding used in templates for Ruby 1.9. 
    config.encoding = "utf-8" 

    # Configure sensitive parameters which will be filtered from the log file. 
    config.filter_parameters += [:password] 

    # Enable the asset pipeline 
    config.assets.enabled = true 

    # Version of your assets, change this if you want to expire all your assets 
    config.assets.version = '1.0' 
    end 
end 

我還發現,當我嘗試運行命令行「軌服務器」,我收到類似的錯誤消息。我不知道這些信息是否有用。

謝謝!

+0

可以請您發佈您的Gemfile的內容? – Tilo

+0

source'http://rubygems.org' gem'rails','3.0。9' 寶石 'sqlite3的', '1.3.3' 組:發展做 寶石 'RSpec的護欄', '2.6.1' 結束 組:測試做 寶石 'RSpec的護欄',「2.6 .1' gem'webrat','0.7.1' end – user975914

+0

本教程讓我將Gemfile的內容更改爲上述文章。 – user975914

回答

0
在你的config/application.rb中文件

,試圖取消對「鏈輪」路線是這樣的:

# require "sprockets/railtie" 

然後檢查是否正常工作之後......應該做的伎倆...

但如果不是,請檢查您的Gemfile,它應該是這個樣子:

# gem "rails", "~> 3.1.0"  # or "3.0.9" 
gem "rails" , "3.0.9" 
gem 'sqlite3', '1.3.3'   # or whatever DB you use 

如果仍然沒有幫助,請檢查您所安裝的鏈輪的版本: 在外殼,做:

$ gem list | grep sprock 
sprockets (2.0.0.beta.10) 
+0

我編輯了config/application.rb並運行生成命令 C:\ Users \ abcd \ rails_projects2 \ sample_app> rails generate controller Page home contact C:/Users/abcd/rails_projects2/sample_app/config/application.rb:13:在':未定義的方法'groups for Rails:模塊(NoMethodError) from C: /Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/comman ds.rb:15:在'require' from C:/ Ruby192/lib/ruby​​/gems/1.9.1/gems/railties-3.0.9/lib/rails/comman ds.rb:15:在' from script/rails:6:in'require' from腳本/導軌:6:在'

' – user975914

+0

我的Gemfile也是正確的,這是我的鏈輪版本:鏈輪(2.0.1,2.0.0) – user975914

+0

你可以在你的問題下面切割+粘貼你的Gemfile嗎? – Tilo

2

它看起來像教程使用Rails 3.0.9,但你已經創建使用Rails的寶石更高版本應用程序。

sprockets已在版本3.1中添加。儘管您已經更新了Gemfile以指定Rails 3.0.9,但運行rails new sample_app時生成的代碼需要Rails 3.1 gem可用(即只更改Gemfile並不足以更改應用程序的Rails版本)。

您可以嘗試簡單地在您的application.rb文件中註釋對sprockets的引用,但即使現在可行,也可能會有其他差異,稍後會導致錯誤。

最好的辦法是從頭開始,但要確保你使用的是Rails 3.0.9。如果您使用的是RVM,則可以創建一個新的gemset並安裝3.0.9,然後使用該gemset。

或者,當您創建應用程序指定的命令需要的寶石的版本:

rails _3.0.9_ new sample_app 

如果使用第二種方法,那麼你所創建的應用程序,只需使用rails通過後本身發佈命令(如generate)應該沒問題,因爲Rails確定應用程序的版本並使用正確的寶石版本有一定的魔力,即使安裝了更高版本的版本 - 您不需要始終使用rails _3.0.9_

相關問題