RVM/rbenv 有没有人试过绕开依赖来 rvm install ruby

jakit · 2019年02月21日 · 最后由 msg7086 回复于 2019年03月07日 · 891 次阅读

如果在一台没有 root / sudo 权限的 Linux server,是没有 yum install / apt install 能力的。

这时候,rvm install 默认指向调用 yum install / apt install 【各种依赖】(libffi-dev openssl-dev)

这会给人造成很大的困扰,有没有人有解决办法?在线等

请允许 me 把老人们艾特出来 @jasl @Rei @huacnlee

共收到 16 条回复

前阵子听说 Homebrew 的 Linux support 好像是更成熟了, 可以在没有 root 权限的环境下使用这个包管理器安装 Ruby 试试: https://docs.brew.sh/Linuxbrew

再就是用 static link ruby 搜索了一下, 找到这个项目: https://github.com/phusion/traveling-ruby 但是我还没仔细看文档.

上面两个方案我都是临时搜出来的, 自己没有试过, 不知道是否可靠. 但愿有用.

额外地, 用 @ 人的点名提问的方式, 是论坛规则里的《提问的智慧》一文所不提倡的:

当某个项目提供开发者邮件列表时,要向列表而不是其中的个别成员提问,即使你确信他能最好地回答你的问题。

Linuxbrew 我在没有root权限的机器上安装成功rvm和ruby,确实可以。

目前我是用 Docker 搞定。完全不用在新机器上装任何 Ruby/Ruby on Rails 依赖。
只要装了 Docker + 有镜像就能跑起来。目前生产环境在用 Docker Swarm。
(注:只有一部分做了容器化,Nginx / 数据库没有进行容器化)

如果再加上个私有网络这个条件呢……没办法连公网的这种😂 😂

没法连公网连gem都装不了

在没有rvm或者rbev的上古时期,人们是怎么安装ruby的呢…

linux下保证自己依赖装好之后,去ruby-lang.org下载ruby的源码,然后自己编译,基本上三步confugure,make,make install就可以安装好了…我自己有一台服务器上得pg,ruby都是这么装的😂

hegwin 回复

首先第一条,不要用make install安装软件包……

我来顺带问一下有没有人交叉编译过 Ruby,手里有个 Cubieboard,arm 的,性能差,编译一个 ruby 要好久,一直想尝试下交叉编译,不知道有没有坑

msg7086 回复

为啥不能 make install 。。。。。

./configure --prefix=$HOME/.ruby

make

# Not sudo
make install

echo 'export PATH="$HOME/.ruby/bin:$PATH"' >> $HOME/.bashrc

libffi-dev openssl-dev 也同理。手动编译,安装在不用 root 的目录

a-wing 回复

可能是说 make install 后很难撤销操作,除非是能够把所有文件都 install 到一个特定的目录,或者是软件包提供了良好的 make uninstall 用于卸载

a-wing 回复

#12是一方面。 另一方面是软件版本管理,make install装好以后很容易忽视安全更新。

msg7086 回复

😂😂我觉得这是 make install 的优点,install之后只是把编译的文件写到了一个目录,没有影响系统呀,要删除的话直接删掉那个目录就好了…我一般会做几个软连接,这样我就可以在一台机器上装不同版本的postgres,之所以这么做是有个服务一直用的pg 8.4且没法升级(:з」∠) 当然大家现在用docker了就没这需求了

没权限,还是别从源代码安装了,依赖是必须的。

你可以让 Linux 服务器管理员给你安装好 Docker Machine,然后用 Docker 来跑 Ruby / Rails

hegwin 回复

很多人无脑直接装系统,这种情况下就是问题了。如果自己知道改prefix当然另当别论。

另外像是你说的pg,还是要有人盯着官方的安全补丁,勤升级才好。有时候连带其他组件更新也需要重新编译。比如nginx可以选择静态编译OpenSSL,那OpenSSL有新的安全更新的时候,就要连带nginx一起重新编译了。

而且就算要自己编译,我也是提倡用发行版自己的打包脚本来编译,减少每次编译之间带来的差异。我们这维护一个nginx mod版,就是debian打包脚本然后用docker编译成deb包,这样版本更新进度一目了然,而且编译过程reproducible。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册