ruby-on-rails - 根据 ruby​​.railstutorial.org 升级到 Rails 4 后无法加载 Railtie

标签 ruby-on-rails rubygems railstutorial.org railtie gem-bundler

操作系统是 Ubuntu 12.04,64 位。

刚接触 Rails。对于 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: Could not find railties 得到了一些想法,概述如下,但尚未找到解决方案。

这是详细信息。

昨天(在我的浏览器中)第 3 章的 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 命令时遇到无法加载railtie 错误。

来自Rails: Could not find railties ,我尝试了以下方法

$ 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

仍然出现错误

哎呀!!!

有什么想法吗?

最佳答案

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 中;现在,如果您想使用它,则必须显式添加它。

关于ruby-on-rails - 根据 ruby​​.railstutorial.org 升级到 Rails 4 后无法加载 Railtie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16782198/

相关文章:

ruby-on-rails - Rails 教程 - 命名路由

ruby-on-rails - Michael Hartl 的 Rails 教程第 12 章——所有 54 个测试都失败了……?

ruby-on-rails - 带有可选参数的 Rails Search?

即使需要 gem,Ruby 'uninitialized constant' 错误

用于浏览已安装的 gems 代码的 Ruby 工具

ruby - ActiveModel::SecurePassword:Module 的未定义方法 `min_cost'

html - Flexbox 作为 Firefox 和 Opera 上表格的替代品

ruby-on-rails - 在 Ruby on Rails 中为一个模型设置两个 Controller 是不好的做法吗?

ruby-on-rails - 在入口脚本中进行捆绑安装和 yarn 安装-Docker

ruby-on-rails - M.Hartl 的 Rails 教程 7.4.1 中的参数数量错误(2 对 1)错误