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的过程中,顺便也替换了opensslopenssl是通过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.0node环境,于是我就直接切换到该环境下。执行命令

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
2
npm install webpack-cli
npm install webpack

安装完毕后再次执行上面的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/webpackernode包,于是执行npm install命令进行安装。安装完毕后,结果还是提示我缺少@rails/webpackernode包(我真的很无语)。

尝试了网上的几种解决方案后发现还是不行。最后,我把整个node_modules文件夹全部删除,然后重新安装后,竟然神奇地通过了compile命令。我猜可能是跟我一开始使用的node版本有关系,我是半途才切换到的13.6node版本。

所以说,整个webpacker之路真的很曲折。其中可能有些步骤我记不太清楚了,可能表述的有问题。有些弯路可能我没有记在里面,总之花了我三个早晨的时间。

最后,得出的总结是,能用新的操作系统就别用旧的操作系统了,很多软件都跟不上变化了。

avatar

chilihotpot

You Are The JavaScript In My HTML