Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如果是一个项目';s的Ruby版本已明确指定,从RVM更改为rbenv是否会引入bug?_Bash_Heroku_Rvm_Zsh_Rbenv - Fatal编程技术网

Bash 如果是一个项目';s的Ruby版本已明确指定,从RVM更改为rbenv是否会引入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

我试图弄清楚我遇到的一个bug是否可能与我使用
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可执行文件时,他们实际上在做相同的事情。但是我给一位朋友发了电子邮件,问了同样的问题,他也想知道错误是什么,所以一旦我把它打出来,我会更新我的问题。