ErrorTracking - Could not find migration.rb

奇葩的一次报错记录。

问题描述

在运行rails g migration xxxx时弹出如下的报错:

Running via Spring preloader in process 16933
      invoke  active_record
Could not find "migration.rb" in any of your source paths. Your current source paths are:
/Users/username/path/to/project/lib/templates/active_record/migration
/Users/username/.rvm/gems/ruby-2.4.0/gems/activerecord-5.2.0/lib/rails/generators/active_record/migration/templates

其中:

ruby v2.4.0

rails v5.2.0

同样,运行rails g controller xxx , rails g model xxx时,同样显示无法找到controller.rb, model.rb文件。

解决方法

google了下,一直没有看到类似的问题,于是按照提示,去终端提示的:Your current source paths中去搜索,查看目录下的文件,发现有一个migration.rb.tt的文件,直接复制了一份,命名为migration.rb, 终端再次执行:

rails g migration xxxx

OK!

对于controller以及model部分做同样的处理即可。

不过疑惑的是,为什么会有这些文件,它们是什么,应该存放的文件放在了哪里呢?

Google后,在gem bundle里面可以发现,这些带有tt后缀的文件应该是临时文件。


      templates = {
        "Gemfile.tt" => "Gemfile",
        "lib/newgem.rb.tt" => "lib/#{namespaced_path}.rb",
        "lib/newgem/version.rb.tt" => "lib/#{namespaced_path}/version.rb",
        "newgem.gemspec.tt" => "#{name}.gemspec",
        "Rakefile.tt" => "Rakefile",
        "README.md.tt" => "README.md",
        "bin/console.tt" => "bin/console",
        "bin/setup.tt" => "bin/setup"
      }

顺藤摸瓜,发现本机上ruby-2.4.0下的那些ruby文件,很多都是带有了tt扩展名的,比如:

model.rb.tt
module.rb.tt
application_record.rb.tt

至于为什么会出现这种情况,Google了也没找到,我回顾自己的操作,因为之前用的ruby是2.3.6,rails5.2, 后面将ruby升级了到2.4.0,随即重新在ruby2.4.0下裝rails,2.4.0 ruby on 5.2.0 rails,安装的过程中出现报错:

ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- bundler (LoadError)

于是按照指示,执行了gem install bundler。看了下,这些带有tt扩展名的文件生成时间差不多也是这个指令执行的时间,也许是在这一步导致的。至于到底为什么会这样,我也是很疑惑,也许是bundle很强大,连这些rails的源文件也能备份?

先记录下,在脑子里留个印象,下次再遇到,也许可以解惑。

参考

what is .tt file in ruby