rails4 upgrade to rails5

Rails4 -> Rails5

  • 修改Gemfile
gem 'rails', '4.2.6' -> gem 'rails', '~> 5.0.0'

然后bundle,报错是肯定的了。。。
把自己的Gem给注释了然后在bundle,是可以了。
然后取消注释,在bundle。有些gem不兼容。可以先去除。

bundle成功之后
rails s会发现

lib/active_support/dependencies.rb:293:in `require': cannot load such file -- rack/showexceptions (LoadError)

这个是由于sinatra的版本引起的,去使用最新的sinatra

#Gemfile
gem 'sinatra', '.0.0.beta2', require: false

然后重启就可以了。

重启会发现样式文件不对,是因为rails5有一个总的文件管理,在app/assets/config/manifest.js.不过内容不需要写。

然后部署的时候出现了

ArgumentError: Before process_action callback :verify_authenticity_token has not been defined

找了很久,在

skip_before_action :verify_authenticity_token, only: [:create]

修改

skip_before_action :verify_authenticity_token, only: [:create], raise: false

这样就可以了。

后期发现,manifest.js不加入相关内容会报错,然后加上去。
再次部署, 会出现

NoMethodError: undefined method `split' for nil:NilClass

google了很久,都是gem引起的。然后查找manifest的文档Rails 5: The Sprockets 4 Manifest.
可以发现,是版本的原因。不知道为啥不行,就先使用4.0以下的sprockets版本。

另外在正式环境上,可以发现controller中使用的lib下的类,报错找不到(开发环境不会出现这个问题)。
那是因为在生产环境上,是禁止使用了autoloading。参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值