在ruby.railstutorial.org上升级到rails 4之后,不能加载railtie

操作系统是Ubuntu 12.04,64位。

新的铁路。 相对较新的Ruby。 遵循ruby.railstutorial.org教程,第3章。

本教程已更新为使用ruby 2.0.0和Rails 4.0.0.rc1。 以前gemfile是指定Rails 3.2.13,而不是指定Ruby版本。 在学习本教程中的最新Gemfile之后,使用ruby 2.0.0和Rails 4.0.0.rc1,运行rails命令时出现以下错误。 这里的例子是rails服务器

user@machine:~/bin/railslearn/sample_app$ rails server /home/paul/bin/railslearn/sample_app/config/application.rb:7:in `require': cannot load such file -- active_resource/railtie (LoadError) from /home/paul/bin/railslearn/sample_app/config/application.rb:7:in `<top (required)>' from /home/paul/.rvm/gems/ruby-2.0.0-p195@railstutorial_rails_4_0/gems/railties-4.0.0.rc1/lib/rails/commands.rb:78:in `require' from /home/paul/.rvm/gems/ruby-2.0.0-p195@railstutorial_rails_4_0/gems/railties-4.0.0.rc1/lib/rails/commands.rb:78:in `block in <top (required)>' from /home/paul/.rvm/gems/ruby-2.0.0-p195@railstutorial_rails_4_0/gems/railties-4.0.0.rc1/lib/rails/commands.rb:75:in `tap' from /home/paul/.rvm/gems/ruby-2.0.0-p195@railstutorial_rails_4_0/gems/railties-4.0.0.rc1/lib/rails/commands.rb:75:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>' 

我确实从Rails得到了一些想法:无法find下面列出的railties ,但还没有find解决办法。

这是细节。

昨天(在我的浏览器中)第三章的Gemfile如下。 一切正常。

 $ cat Gemfile source 'https://rubygems.org' gem 'rails', '3.2.13' gem 'bootstrap-sass', '2.1' gem 'bcrypt-ruby', '3.0.1' gem 'faker', '1.0.1' gem 'will_paginate', '3.0.3' gem 'bootstrap-will_paginate', '0.0.6' gem 'jquery-rails', '2.0.2' group :development, :test do gem 'sqlite3', '1.3.5' gem 'rspec-rails', '2.11.0' # gem 'guard-rspec', '1.2.1' # gem 'guard-spork', '1.2.0' # gem 'childprocess', '0.3.6' # gem 'spork', '0.9.2' end # Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails', '3.2.5' gem 'coffee-rails', '3.2.2' gem 'uglifier', '1.2.3' end group :test do gem 'capybara', '1.1.2' gem 'factory_girl_rails', '4.1.0' gem 'cucumber-rails', '1.2.1', :require => false gem 'database_cleaner', '0.7.0' # gem 'launchy', '2.1.0' # gem 'rb-fsevent', '0.9.1', :require => false # gem 'growl', '1.0.3' end group :production do gem 'pg', '0.12.2' end 

今天上午,教程中的Gemfiles使用了ruby 2.0.0和rails 4.0.0.rc1。 我想要这个设置工作,所以我没有与更新的教程冲突。 新的Gemfile如下。

 $ cat Gemfile source 'https://rubygems.org' ruby '2.0.0' gem 'rails', '4.0.0.rc1' group :development, :test do gem 'sqlite3', '1.3.7' gem 'rspec-rails', '2.13.1' end group :test do gem 'selenium-webdriver', '2.0.0' gem 'capybara', '2.1.0' end gem 'sass-rails', '4.0.0.rc1' gem 'uglifier', '2.1.1' gem 'coffee-rails', '4.0.0' gem 'jquery-rails', '2.2.1' gem 'turbolinks', '1.1.1' gem 'jbuilder', '1.0.2' group :doc do gem 'sdoc', '0.3.20', require: false end group :production do gem 'pg', '0.15.1' end 

首先,我将Gemfile中的ruby版本更改为ruby'1.9.2',因为这正是我正在运行的版本,并且认为我的bundle更新有错误。 我没有记笔记。

然后将Gemfile中的ruby版本更改回“2.0.0”,并且:

 $ rvm install 2.0.0 $ rvm use 2.0.0 --default $ bundle update $ bundle install 

现在我得到了不能加载Rails的错误与rails命令。

从Rails:无法findrailties ,我尝试了以下

 $ gem uninstall railties Select gem to uninstall: 1. railties-4.0.0.rc1 2. railties-3.2.13 3. All versions > 2 You have requested to uninstall the gem: railties-3.2.13 rails-3.2.13 depends on railties (= 3.2.13) If you remove this gem, these dependencies will not be met. Y # uninstall railties-3.2.13 

仍然得到错误

 $ gem uninstall rails # to uninstall rails-3.2.13 $ gem uninstall railties # to also uninstall railties-4.0.0.rc1 $ rvm reinstall 2.0.0 $ rvm 2.0.0 --default $ bundle update # using the Gemfile with ruby 2, rails 4 $ bundle install $ gem list | grep rail coffee-rails (4.0.0) jquery-rails (2.2.1) rails (4.0.0.rc1) railties (4.0.0.rc1) rspec-rails (2.13.1) sass-rails (4.0.0.rc1) sprockets-rails (2.0.0.rc4) 

仍然得到错误

回顾第一章教程中的原始设置(现在更新为ruby 2,rails 4)

 $ rvm use 2.0.0@railstutorial_rails_4_0 --create --default $ gem update --system 2.0.0 $ gem install rails --version 4.0.0.rc1 --no-ri --no-rdoc $ bundle update # using Gemfile with ruby 2, rails 4 $ bundle install 

仍然得到错误

UG!

有任何想法吗?

ActiveResource是Rails 2.x中添加的一个API,用于支持XML(以及更高版本的JSON)API,以便Rails站点可以相互“交谈”。 当RESTful API的概念进入框架时,这是一个非常热门的话题。 随着时间的推移,它变得更加新奇,并且不经常维护,所以它在Rails 4.x中被拉下了核心。

Rails 4.x有两个选项。 如果你不打算使用ActiveResource(如果你是Rails的新手,并且正在编写一个教程的话,我会认为是这种情况),那么你可以简单地删除或注释掉将其引入框架的railtie。 打开“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" <--- comment out this line 

如果你想使用ActiveResource,那么只需将它添加到项目的Gemfile。 以前它被包括在rails gem中作为依赖; 现在如果你想使用它,你必须明确地添加它。

“主动资源”可以作为Rails 4的一个独立的gem

我有同样的错误。 我所做的是:在Gemfile中,我更改了rails的版本:gem'rails gem 'rails', '4.2.0'然后在命令行执行这个命令: bundle install 。 要查看在CLI中生成可用的types,请键入rails grails generate

Interesting Posts