SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 解决办法

转载自:https://blog.youkuaiyun.com/ysk575664647/article/details/52965737

在配置环境的时候,因为下面这个错误导致sass总是安装失败,后续步骤无法进行。

Error fetching https://gems.ruby-china.org/:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://gems.ruby-china.org/specs.4.8.gz)

意思很明显,就是SSL证书验证不了,Ruby自己没有SSL证书,所以https请求被服务器拒绝。

针对这种情况,有两种解决办法,一种是不使用https协议来请求数据,用http协议来代替之,因为http协议不需要验证SSL证书,所以上面那个问题也就不存在了。

第二种方法,既然Ruby自己没有携带SSL证书,那我就自己下载一个证书添加给他不就好了,这样Ruby有了SSL证书,https协议也就不会被服务器拒绝了。

Step1:下载Ruby证书,这里是下载链接

链接: http://pan.baidu.com/s/1gfzAJKZ 密码: ithw

Step2:下载完成以后将证书放置在一个不经常改动的地方,我放置在c:\Program Files\Ruby22\lib下。之后在用户环境变量中新建一个变量,名字为SSL_CERT_FILE,值设置为证书的完整路径,例如我的路径需要设置为c:\Program Files\Ruby22\lib\ca-bundle.crt,完成以后将cmd窗口重启,之后再进行操作就成功了。

 

 

Tips:我在配置过程中遇到几个其他的问题,在这里一并提醒下后来者。

1. Ruby因为防火墙的原因,需要配置成国内的镜像,原本国内的镜像地址是https://ruby.taobao.org,现在已经改为了https://gems.ruby-china.org/,这个问题需要注意下。

2. 如果你在安装sass过程中遇到了以下错误

ERROR: While executing gem (Errno::EACCES) 
<span style="white-space:pre">	</span>Permission denied @ rb_sysopen......

这是因为sass安装权限不够造成的,关掉当前cmd,然后重新以管理员身份运行cmd,再继续操作就好了。

 

最后把我看到的一篇讲解如何安装Ruby及其他环境的文章分享给大家

http://www.cnblogs.com/yyman001/p/install_sass_compass_for_window.html

 

### 避免在工具类中添加 `if __name__ == "__main__"` 的方法及替代方案 在 Python 中,`if __name__ == "__main__":` 是一种常见的模式,用于区分模块是被直接运行还是作为其他模块的导入部分[^2]。然而,在设计工具类时,通常不需要这种结构,因为工具类的主要目的是提供一组可重用的功能,而不是作为一个独立脚本执行。 #### 方法一:通过函数封装逻辑 将所有的功能封装在一个或多个函数中,并让这些函数能够接受必要的参数来完成任务。这样即使不使用 `if __name__ == "__main__"` 结构,也可以轻松调用该工具类中的方法。 ```python class MyToolClass: def process_data(self, data): """处理输入的数据""" result = [] for item in data: processed_item = self._transform(item) result.append(processed_item) return result def _transform(self, value): """转换单个值的具体实现""" return value * 2 # 假设这是一个简单的倍增操作 ``` 在这种情况下,外部代码可以通过创建实例并显式调用来使用这个工具类: ```python tool_instance = MyToolClass() data_to_process = [1, 2, 3] processed_result = tool_instance.process_data(data_to_process) print(processed_result) # 输出: [2, 4, 6] ``` #### 方法二:利用装饰器简化接口 如果希望进一步隐藏复杂性或者标准化某些行为,可以考虑引入装饰器技术。例如,定义一个通用的日志记录装饰器应用于各个成员方法上。 ```python def log_function_call(func): import logging logging.basicConfig(level=logging.INFO) def wrapper(*args, **kwargs): logging.info(f"Calling {func.__name__} with args={args}, kwargs={kwargs}") result = func(*args, **kwargs) logging.info(f"{func.__name__} returned {result}") return result return wrapper class AnotherToolClass: @log_function_call def add_numbers(self, a, b): return a + b ``` 上述例子展示了如何向任何需要额外功能的方法自动附加日志记录能力而无需修改原始业务逻辑[^5]。 #### 替代方案三:采用命令行解析库 argparse 或 click 构建 CLI 应用程序 当构建的是面向终端用户的实用程序而非纯粹供内部使用的组件时,则可能更倾向于建立完整的命令行界面 (CLI),此时也不必依赖于传统的入口判断语句形式。借助像 Argparse 或 Click 这样的第三方库可以帮助快速搭建这样的应用架构。 ```python import argparse parser = argparse.ArgumentParser(description="A simple command-line interface example.") parser.add_argument(&#39;integers&#39;, metavar=&#39;N&#39;, type=int, nargs=&#39;+&#39;, help=&#39;an integer for the accumulator&#39;) parser.add_argument(&#39;--sum&#39;, dest=&#39;accumulate&#39;, action=&#39;store_const&#39;, const=sum, default=max, help=&#39;sum the integers (default: find the max)&#39;) args = parser.parse_args() print(args.accumulate(args.integers)) ``` 此片段展示了一个基本的累加/最大值计算的小型应用程序,它完全基于命令行参数驱动,因此也不存在传统意义上的主程序判定需求[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值