`

如果你升级完Rails 2.3.2 遇到了问题

阅读更多


最主要的提示是说:

uninitialized constant ApplicationController
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:443:in `load_missing_constant'
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:80:in `const_missing'
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:92:in `const_missing'
F:/ROR_SPACE/edepot/app/controllers/store_controller.rb:9


而去store_controller.rb去看

class StoreController < ApplicationController

也就是说找不到application.rb的定义,而当前的文件又确实有application.rb的定义。问题在那里呢?

原来是rails升级以后,application.rb默认文件名改了。这或者是“约定高于配置”的另一面,有人改了约定,我们还不太清楚。那么好吧,我把application.rb的文件名改成application_controller.rb。
接着想要运行,或者,还有一些东西要改cnfig/boot.rb里,那个典型的require_gem问题。

    else
      gem "rails"
      #require_gem "rails"
      require 'initializer'


然后,运行时有点升级

F:\ROR_SPACE\depot_l>rake db:migrate
(in F:/ROR_SPACE/depot_l)
rake aborted!
undefined method `require_gem' for main:Object
F:/ROR_SPACE/depot_l/rakefile:4
(See full trace by running task with --trace)

F:\ROR_SPACE\depot_l>rake db:migrate
(in F:/ROR_SPACE/depot_l)
Your config/boot.rb is outdated: Run "rake rails:update".

F:\ROR_SPACE\depot_l>rake rails:update
(in F:/ROR_SPACE/depot_l)
install -c -m 0755 c:/ruby/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/tasks/../../bin/dbconsole script/dbconsole
F:/ROR_SPACE/depot_l/app/controllers/application.rb has been renamed to F:/ROR_SPACE/depot_l/app/controllers/application_controller.rb, update your SCM as necessary

这段说明也表明,文件名改了。

uninitialized constant FileColumn::ClassMethods::Inflector


如果你还有classic_paginate

那么,请记着也要改这个

options[:singular_name] ||= ActiveSupport::Inflector.singularize(collection_id.to_s)   
options[:class_name]  ||= ActiveSupport::Inflector.camelize(options[:singular_name])   
#      options[:singular_name] ||= Inflector.singularize(collection_id.to_s)   
#      options[:class_name]  ||= Inflector.camelize(options[:singular_name])  
  • 大小: 34.5 KB
分享到:
评论
11 楼 utensil 2009-04-15  
robbin 写道
每次升级Rails都有点心惊肉跳的,不单纯是这些不兼容的文件修改,而是很多不实际上线运行发现不了的新问题。


Robbin何不依据自己对Rails的修改,在Github上做一个兼容性和稳定性更好的fork?这样不仅方便大家,而且可以方便地pull回Rails。
10 楼 richyzhang 2009-03-25  
rainux 写道
yangzhihuan 写道
rainux 写道
yangzhihuan 写道
我的解决方法是:
新建一个Rails 2.3.2的工程,把boot.rb文件拷贝过去旧工程中.
然后执行一下 rake rails:update
基本上就搞定了.


没有必要创建一个新工程吧,直接在 config/environment.rb 里把 Rails 版本号改成 2.3.2 之后执行 rake rails:update 即可更新所有的文件,包括 application.rb 自动改名。


我一开始就是这样干的,但是执行rake的时候会提示 boot.rb 有错的.


我从 Rails 2.2.2 升级上来的,没有问题。可能是因为你原来的 Rails 版本比较老。


用自动升级应该跟mysql类似,就是一个版本一个版本的upgrade,这样的话麻烦会少很多.
9 楼 rainux 2009-03-25  
yangzhihuan 写道
rainux 写道
yangzhihuan 写道
我的解决方法是:
新建一个Rails 2.3.2的工程,把boot.rb文件拷贝过去旧工程中.
然后执行一下 rake rails:update
基本上就搞定了.


没有必要创建一个新工程吧,直接在 config/environment.rb 里把 Rails 版本号改成 2.3.2 之后执行 rake rails:update 即可更新所有的文件,包括 application.rb 自动改名。


我一开始就是这样干的,但是执行rake的时候会提示 boot.rb 有错的.


我从 Rails 2.2.2 升级上来的,没有问题。可能是因为你原来的 Rails 版本比较老。
8 楼 yangzhihuan 2009-03-25  
rainux 写道
yangzhihuan 写道
我的解决方法是:
新建一个Rails 2.3.2的工程,把boot.rb文件拷贝过去旧工程中.
然后执行一下 rake rails:update
基本上就搞定了.


没有必要创建一个新工程吧,直接在 config/environment.rb 里把 Rails 版本号改成 2.3.2 之后执行 rake rails:update 即可更新所有的文件,包括 application.rb 自动改名。


我一开始就是这样干的,但是执行rake的时候会提示 boot.rb 有错的.
7 楼 yehs220 2009-03-24  
QuakeWang 写道

另外还有一些小改动,比如将原先自己写的对rails动态内容输出做gzip压缩,现在可以迁移到rack,用现成的:
config.middleware.use Rack::Deflater


怎么样跳过Deflator?比如动态生成的图片什么的。
6 楼 rainux 2009-03-24  
yangzhihuan 写道
我的解决方法是:
新建一个Rails 2.3.2的工程,把boot.rb文件拷贝过去旧工程中.
然后执行一下 rake rails:update
基本上就搞定了.


没有必要创建一个新工程吧,直接在 config/environment.rb 里把 Rails 版本号改成 2.3.2 之后执行 rake rails:update 即可更新所有的文件,包括 application.rb 自动改名。
5 楼 lgn21st 2009-03-22  
我手上的项目也刚刚从2.2.2升级到2.3.2,发现几个稍微复杂一点的关联模型上定义的named_scope执行时报SQL语法错误,花了点时间没有看出问题到底在那里,只能放到明天继续排查原因...
可能是原来在2.2.2上通过但是这么用不对
或者是2.3.2有bug,希望是前者...
4 楼 yangzhihuan 2009-03-22  
我的解决方法是:
新建一个Rails 2.3.2的工程,把boot.rb文件拷贝过去旧工程中.
然后执行一下 rake rails:update
基本上就搞定了.
3 楼 wosmvp 2009-03-21  
JavaEye果然够激进 
2 楼 QuakeWang 2009-03-21  
在迁移JavaEye代码到2.3,已经遇到3个问题了:
1. Cache Sweeper不能正常的auto load,这个ticket号称已经解决,但是还有很多人报告有问题:
http://rails.lighthouseapp.com/projects/8994/tickets/1977-actioncontrollercachingsweeper-autoloading-is-broken
解决方案是检查一下你的environment文件中是否有调用ActionContoller或者ActionRecord的代码,导致先它在sweeper之前加载了,JavaEye在Rails 2.2.2的代码有类似如下设置:
ActionController::Base.session_options[:session_domain] = DEFAULT_ROOT_DOMAIN
ActionController::Base.asset_host = "http://#{DEFAULT_SITE_DOMAIN}"

改成通过config设置就正常了:
config.action_controller.session[:domain] = DEFAULT_ROOT_DOMAIN
config.action_controller.asset_host = "http://#{DEFAULT_SITE_DOMAIN}"


2. 新加的Strategy::LocalCache是memory cache的subclass,里面有freeze的代码:@data[name] = value.freeze,导致memcache store的对象全部被freeze
零时解决方案是hack localcache

3. Collection destroy不接受id作为参数了:
http://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/2306-associationcollections-destroy-method-is-not-compatible-with-old-version
解决方案是先查询,再调用删除方法。

另外还有一些小改动,比如将原先自己写的对rails动态内容输出做gzip压缩,现在可以迁移到rack,用现成的:
config.middleware.use Rack::Deflater


不过2.3感觉在开发环境中比2.2要快很多,和改进的lazy load有关,在生产环境还须再测试对比看看。
1 楼 robbin 2009-03-21  
每次升级Rails都有点心惊肉跳的,不单纯是这些不兼容的文件修改,而是很多不实际上线运行发现不了的新问题。

相关推荐

    rails 2.3.2离线安装rails 2.3.2离线安装

    rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...

    rails2.3.2gem本地安装包及使用说明

    - 如果你遇到任何问题,查阅 Rails 2.3.2 的官方文档或社区资源,例如 Stack Overflow 上的相关问题,可能会有所帮助。 6. **安全与升级** - 考虑到 Rails 2.3.2 已经非常过时,可能存在大量的安全漏洞。在生产...

    rails2.3.2 ExceptionNotifier 配置

    标题 "rails2.3.2 ExceptionNotifier 配置" 指的是在Rails 2.3.2版本中,如何设置和使用ExceptionNotifier插件。ExceptionNotifier是Rails的一个非常有用的gem,它允许开发者在应用程序中捕获并通知异常情况,如错误...

    rails2.3.2

    标题 "rails2.3.2" 指的是 Ruby on Rails 框架的一个特定版本,即 2.3.2。Ruby on Rails(通常简称为 Rails)是一个基于 Ruby 语言的开源 Web 应用程序框架,它遵循 Model-View-Controller (MVC) 设计模式,用于构建...

    better_assets:Better_assets 是一个 Rails 2.3.2 插件,它增强了一些资产标签助手,使您的项目变得更加强大

    Better Assets 是 Rails 2.3.2 AssetTagHelper 的一个monkeypatch,用于启用一些附加功能。 关键点是: 基于时间的缓存资产文件到期,这主要用于... 远程资产的缓存和组合 最后,您可以使用传递给javascript_...

    bootstrap2.3.2.zip

    "bootstrap2.3.2.zip"是一个包含Bootstrap 2.3.2版本的压缩包,该版本发布于2013年,是Bootstrap早期的一个稳定版本。 Bootstrap 2.3.2主要特点包括: 1. **响应式布局**:Bootstrap的核心特性之一就是其响应式...

    rails和mysql数据库连接中出现的问题以及解决办法

    在开发Web应用时,Rails框架和MySQL数据库的集成是一个常见的选择。然而,有时在尝试连接Rails应用到MySQL数据库时,可能会遇到一些问题...在遇到问题时,查看错误日志、查阅官方文档和社区资源是解决问题的关键步骤。

    重构你的Rails程式码

    1. **信任度提升:** 如果您有足够的时间去升级Rails版本,那么通常也会有足够的资源来重构代码。这不仅能够提高代码质量,还能增加团队对现有代码库的信任度。 2. **升级行为的变化:** 升级过程中可能会遇到一些新...

    ruby on rails API

    7. 认证与授权:Rails API通常需要处理认证和授权问题。这可以通过如Devise这样的库实现用户身份验证,而Pundit或CanCanCan则可用来处理权限控制。 8. 分页与过滤:为了提高性能和用户体验,API通常需要支持分页和...

    railsbrain网站的rails2.3文档(bug修复版)

    Railsbrain是一个专注于Rails框架的在线资源平台,而这个“railsbrain网站的rails2.3文档(bug修复版)”显然是一份针对Rails 2.3版本的更新文档,旨在修复用户在浏览和交互过程中遇到的问题。Rails是Ruby编程语言的...

    windows下安装或升级rails

    在 Windows 平台上进行 Ruby on Rails 开发时,可能会遇到各种各样的安装问题。本文将详细解释一个常见的问题:“在 Windows 下安装或升级 Rails 时,gem 命令提示需要更新 PATH 或下载 DevKit”,并提供详细的解决...

    Rails的中文乱码问题

    标题中的“Rails的中文乱码问题”涉及到的是在使用Ruby on Rails框架开发Web应用时,遇到的中文字符编码不正确的问题。Rails是一个基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式。在...

    Ruby+on+Rails快速Web应用开发实战.pdf

    - **Rails的版本迭代**:文档中提到的v1.0.0是Rails早期的一个版本,而Rails 2.3.2和Rails 2.5是后续更迭的版本。 - **Rails的主要特性**:Rails采用了约定优于配置(Convention over Configuration)的设计理念,这...

    Rails recipes

    Rails Recipes是一本针对Ruby on Rails框架的实用书籍,它收集了一系列高效解决问题的技巧和方法,也被称为“Rails开发者的宝典”。作者们通过分享自己的经验和见解,为Rails程序员提供了一本既有实际操作指导又有...

    Rails101_by_rails4.0

    此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...

    ruby on rails与MySql的环境配置——支持rails 2.3.5以上版本

    需要注意的是,配置过程中可能会遇到各种问题,如网络不稳定、版本不兼容等,解决这些问题需要耐心和细心。此外,持续学习和交流也是提高技能的关键,可以参考作者的博客或参与相关的社区讨论,例如Sharetronix微博...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **回滚**:如果更新后出现问题,可以通过`git`命令或者手动修改`Gemfile`来回滚到之前的版本。 #### 六、添加第二个路由 - **配置**:在`config/routes.rb`文件中添加新的路由规则,例如`get 'new_route' =&gt; '...

    升级版本后Rails的文件上传

    如果你的应用从一个不支持ActiveStorage的版本升级上来,你需要了解如何迁移现有的文件上传机制到ActiveStorage。 2. **配置存储**:无论是使用ActiveStorage还是第三方库,都需要在`config/storage.yml`文件中配置...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    ruby on rails 开发环境包(ruby1.8.7,rails2.2.3)

    Ruby on Rails,简称Rails,是由David Heinemeier Hansson创建的一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-...但是,如果你正在维护一个老项目或学习历史版本的Rails,这个环境包将是一个宝贵的资源。

Global site tag (gtag.js) - Google Analytics