Bash 如果是一个项目';s的Ruby版本已明确指定,从RVM更改为rbenv是否会引入bug?
我试图弄清楚我遇到的一个bug是否可能与我使用Bash 如果是一个项目';s的Ruby版本已明确指定,从RVM更改为rbenv是否会引入bug?,bash,heroku,rvm,zsh,rbenv,Bash,Heroku,Rvm,Zsh,Rbenv,我试图弄清楚我遇到的一个bug是否可能与我使用rbenv而我的团队其他成员使用RVM有关 我一直想弄清楚的是,rbenv/RVM为特定Ruby创建的可执行文件是否相同。如果分别在.Ruby_version和Gemfile中明确指定了Ruby版本和gem版本,那么rbenv和RVM是否可能对代码进行不同的解释,或者我是否应该期望相同的结果 更新。请求了对我遇到的实际错误的描述,因此在这里。 本质上,项目使用dotenvgem(和dotenv-rails)读取根目录中的.env文件。其中两个值(sa
rbenv
而我的团队其他成员使用RVM
有关
我一直想弄清楚的是,rbenv
/RVM
为特定Ruby创建的可执行文件是否相同。如果分别在.Ruby_version
和Gemfile
中明确指定了Ruby版本和gem版本,那么rbenv
和RVM
是否可能对代码进行不同的解释,或者我是否应该期望相同的结果
更新。请求了对我遇到的实际错误的描述,因此在这里。
本质上,项目使用dotenv
gem(和dotenv-rails
)读取根目录中的.env
文件。其中两个值(salt和IV)是包含换行符的Base64编码字符串。在解码过程中的某个时刻,在每个换行符之前添加一个额外的反斜杠,导致解密失败。问题是,dotenv
gem似乎正在正确读取文件(即在Rails控制台中运行dotenv.load
,显示正确解析的字符串),因此是堆栈中更深的某个gem或扩展导致了问题。我们还没有确定它
我们的快速修复方法是gsub
双转义换行符(与类似,但团队中的一些成员不想合并它,因为他们确信这是由rbenv
引起的环境问题。我不认为是这样,但在我尝试卸载rbenv
并切换到RVM
之前,我想知道这是否有可能,我真的不想这么做
更新#2.问题已解决!
我确实切换到了RVM
,但是没有用。然而,这确实是一个环境问题
这是因为我的默认shell是
zsh
,但我的大多数团队使用bash
,我们使用heroku-local:run
来启动本地开发环境。heroku-local:run
,它使用默认的shell环境。即使您从不同的shell(例如bash
)发出调用但是默认情况下,rails控制台
和heroku-local:run-rails控制台
使用sh
。zsh
处理env变量导入的方式不同于bash
和sh否,rvm和rbenv编译的二进制文件是不相同的,它们是不相同的插入兼容(例如,您不能使用rvm编译ruby
,然后将其放入现有的rbenv设置中)为每种设置提供的编译选项都不同,并且生成的文件处理方式也不同
这样的话,你应该考虑两个相同版本的代码:Ruby < /Cudio>二进制代码,它们是用相同的选项编译成二进制兼容的,也就是说,通过一个二进制文件运行的任何Ruby代码都应该以相同的方式通过另一个二进制文件,不管它们被编译的平台是什么,只要它们是用相同的OPT编译的。图书馆和图书馆
例如,如果编译了rvm,那么在尝试使用依赖于加密函数的库时,您将遇到无尽的麻烦
您可以进行一个非常简单的实验来确定问题:在同一台计算机上编译ruby
,并在两个版本中运行您的实验
针对您概述的特定问题(dotenv和额外换行符),请注意,以及Ruby如何处理其中的控制字符。Ruby仅在双引号字符串中解释转义序列,因此您可以通过确保值始终为单引号来解决问题。可能是一样的……为什么不说您得到的错误是什么呢?有点复杂,我真正想要的是这样我想深入解释一下,如果RVM和rbenv有不同的构建过程,导致不同的可执行文件,或者在构建Ruby可执行文件时,他们实际上在做相同的事情。但是我给一位朋友发了电子邮件,问了同样的问题,他也想知道错误是什么,所以一旦我把它打出来,我会更新我的问题。