奇葩的一次报错记录。
问题描述
在运行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的源文件也能备份?
先记录下,在脑子里留个印象,下次再遇到,也许可以解惑。