美文网首页
rails4升级到rails5

rails4升级到rails5

作者: xiaohesong | 来源:发表于2016-11-17 14:27 被阅读426次

    将近一天的折腾,把rails4升级到了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。参考
    原文

    相关文章

      网友评论

          本文标题:rails4升级到rails5

          本文链接:https://www.haomeiwen.com/subject/alvdpttx.html