我正在将Rails应用程序从4.2.x升级到5.0.x。在Gemfile
中更新了所有与Rails相关的gem之后,运行了rails
任务,按照upgrade guide的要求更新了所有文件,使其符合最新版本:
rails app:update
此命令中有许多冲突,因此我按
a
接受所有冲突,然后在提交之前手动进行检查。我主要关心的是config/routes.rb
文件发生了什么。基本上,保留了文件的全部内容(保存为Rails.application.routes.draw
块)和关于添加到文件末尾的DSL的单个注释。这些年来已添加到应用程序的所有路由都被清除,在其他任何文件中都找不到。这个问题不会阻止我,我只需要签出文件以使其恢复到以前的状态即可。但是,特别令我担心的是,在升级Rails版本的正常情况下,已清除了一个基本文件。我想看看是否还有其他人遇到过这个问题,是否可以预料到,这是怎么回事。欢迎Rails维护者发表意见。谢谢。
最佳答案
app:update
任务只是创建新的Rails应用程序的任务的稍作修改的版本。它基于新的Rails版本中的模板写出config/
和bin/
下的文件。如果您选择a
接受所有冲突,则仅表示Rails将使用其自己的副本覆盖任何不同的文件,而无需询问您。这是正常现象,是预期的。如果您不希望出现这种情况,请不要按a
。
几乎可以肯定,config/routes.rb
是config/
下的一个文件,它几乎与空白样板文件完全不同。
实际上,不能期望Rails解析您的自定义更改并将其与新模板合并。
对于它的价值,我想开始做与您完全一样的工作,使用一个干净的工作目录,只需让app:update
任务覆盖它想要的任何内容,然后与SCM并排进行所有更改-aa差异工具,例如vim-fugitive来暂存或放弃差异。