Ruby On Rails初上手之Webpacker报错
最近在学习Ruby,想着做一个简单的项目练练手,于是就看起了Rails。MAC下安装Rails的过程是曲折的,尤其是我这个过时的操作系统,有一部分软件brew
都不支持了,只能自己手动编译安装。
首先,替换系统自带的ruby,因为原来的版本太低了。我原本想通过下载ruby的管理工具rvm
进行安装,但是最新的rvm
对操作系统有要求,拒绝了我的安装。我又尝试过源代码安装,虽然安装成功了,但是缺少openssl
的支持,无法安装rails
。即使编译时指定了openssl
的路径,也以失败告终。最后,可能是从brew
下载的portable-ruby
包,具体我忘了,竟然可以直接使用,不用编译,完美支持openssl
。ruby版本为2.6.3
。
因为新版本的ruby对openssl
版本有要求,所以在替换ruby的过程中,顺便也替换了openssl
,openssl
是通过brew
安装的,版本为1.1.1
。替换使用的命令是
1 | export PATH=/usr/local/opt/openssl/bin:${PATH} |
然后使用命令gem install rails
安装rails
,版本为6.0.2.1
。后续一切正常,直到修改了config/routes.rb
文件,加了root 'welcome#index'
,报错
Webpacker::Manifest::MissingEntryError in Welcome#index
主要原因是因为找不到public/packs/manifest.json
文件,于是我又去搜了一下怎么生成该文件。貌似要先安装yarn
才行(一脸问号)。我在使用brew
安装yarn
的时候,因为yarn
的依赖包太多,有些包会安装失败,所以可以选择加上--ignore-dependencies
参数,忽略一些依赖包,只安装yarn
本身。yarn
安装之后的版本为1.21.1
。
光装了yarn
还不行,还得安装node
。因为我以前装过nvm
管理工具,有一个版本为9.3.0
的node
环境,于是我就直接切换到该环境下。执行命令
1 | bundle exec rails webpacker:install |
安装成功,但是我还是没有找到public/packs/manifest.json
。网上的方案是推荐执行命令
1 | bundle exec rails webpacker:compile |
但是执行这句命令之后,发现报错
Command “webpack” not found
说明缺少webpack
包,需要使用node
安装。webpack 4.X
不止需要安装一个webpack
,还得安装webpack-cli
。
1 | npm install webpack-cli |
安装完毕后再次执行上面的compile
命令,这次提示我编译失败,说是node
的版本需要8.X || >=10.X
。我一口老血喷出来,唯独不支持9.X
。没办法,只能使用nvm
再次安装新的node
版本,我选择了13.6.0
版本的node
进行安装。为什么不选择最新的14.X
,因为我的系统太旧了,不支持最新的node
。
node
安装完毕,再次按照上面的步骤来时,这次给我报错
1 | Cannot find module '@rails/webpacker' |
查下来确实缺少@rails/webpacker
的node
包,于是执行npm install
命令进行安装。安装完毕后,结果还是提示我缺少@rails/webpacker
的node
包(我真的很无语)。
尝试了网上的几种解决方案后发现还是不行。最后,我把整个node_modules
文件夹全部删除,然后重新安装后,竟然神奇地通过了compile
命令。我猜可能是跟我一开始使用的node
版本有关系,我是半途才切换到的13.6
的node
版本。
所以说,整个webpacker
之路真的很曲折。其中可能有些步骤我记不太清楚了,可能表述的有问题。有些弯路可能我没有记在里面,总之花了我三个早晨的时间。
最后,得出的总结是,能用新的操作系统就别用旧的操作系统了,很多软件都跟不上变化了。