博主是从RubyConf China 2020开始前一天才开始写Ruby的Hello World. 在了解了Ruby各种应用和社区发展以后(这个以后有空再补充) , 觉得很有趣, 自然工作之余开始了Ruby和Rails的学习.
参照Ruby China中的入门教程开始配置环境, 期间也遇到过不少的问题. 有些问题是新手角度特有的, 有些问题是Rails更新结合国内特有的网络环境后新引入. 本来只是自己记录的笔记, 但后来在群聊中多次见到相关的问题, 所以发出来希望能给碰到相同问题的朋友一些参考吧.
报错类似以下形式:
ERROR: While executing gem ... (Gem::RemoteFetcher::UnknownHostError)
timed out (https://api.rubygems.org/latest_specs.4.8.gz)
ERROR: Could not find a valid gem ‘rails‘ (>= 0), here is why:
Unable to download data from https://rubygems.org/ - timed out (https://api.rubygems.org/specs.4.8.gz)
curl https://api.rubygems.org/specs.4.8.gz > specs.4.8.gz
稳妥的方法是切换到ruby china的国内源(注意taobao的源已经不再维护, 而且ruby-china后缀是com)
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
那可能是Debian系统存在的问题, 如IPV6的设置, 可以参考如下信息
注: 博主是WSL2的Debian64bit的系统, 就碰到了原因3, 所以就直接换了Ubuntu, 按照教程重新安装, 所以并没有实际解决该问题.
由于Rails在创建新项目时默认使用Webpack, 所以会有很多Node模块需要在新建过程中安装. 而npm官方的源同样会在国内的网络环境下, 下载安装过程会有各式各样的问题.
所以首先设置国内的npm镜像源:
npm config set registry https://registry.npm.taobao.org
理论而言, 应该能rails new sample能正常创建项目了, 但是即便npm设置了taobao的镜像, 有很大的可能会在npm下载安装依赖包的时候卡住. 最为典型的就是卡在node-sass.
先说解决方案:
还需要特别设置sass的binding.node的下载地址
npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
npm config ls -l // 查看配置信息, 可以检查下前面两步npm配置是否设置成功
node-sass的问题也是坑过了无数前端, 首先它是编译Sass到css库libSass的node绑定, 使用非常广泛, 当前(2020.11.11)原项目团队已经转到dart-sass的开发, node-sass以后应该慢慢会弃用了, 它的安装过程具体分析可以参考此篇
它导致rails出现的问题如下:
另外只会在安装过程提示building node-sass以及失败信息, 但是如果你Ctrl+C 取消安装, 然后再重新安装. npm可能会由于node_module/node-sass的文件夹中已经存在相关文件, 以为已经安装成功而略过node-sass. 导致后续出错信息由于webpacker对webpack的封装, 并不再提示node-sass的错误信, 只会提示webpack出错.
node-sass由于TF-GFW的原因导致无法正常安装, 导致webpack安装出错, 导致webpacker出错, 导致新加Controller后无法被webpacker编译到public/packs中, 于是可能会出现如下错误:
最后不得不吐槽, 这网络环境简直是在消磨技术热情, 尤其是各种工具,语言初学阶段, 如Docker, Gradle, Android.
熟手或许能轻而易举地发现并解决, 但是新手刚开始感兴趣去接触, 希望按照官网的教程开始新的旅程, 结果迎面就是一堵高墙, 墙面写着"Across the Great Wall, we can reach every corner in the world".
原文:https://www.cnblogs.com/htwice/p/13960464.html