如果在一台没有 root / sudo 权限的 Linux server,是没有 yum install / apt install 能力的。
这时候,rvm install 默认指向调用 yum install / apt install【各种依赖】(libffi-dev openssl-dev)
这会给人造成很大的困扰,有没有人有解决办法?在线等
前阵子听说 Homebrew 的 Linux support 好像是更成熟了,可以在没有 root 权限的环境下使用这个包管理器安装 Ruby 试试:https://docs.brew.sh/Linuxbrew
再就是用 static link ruby
搜索了一下,找到这个项目:https://github.com/phusion/traveling-ruby 但是我还没仔细看文档。
上面两个方案我都是临时搜出来的,自己没有试过,不知道是否可靠。但愿有用。
额外地,用 @ 人的点名提问的方式,是论坛规则里的《提问的智慧》一文所不提倡的:
目前我是用 Docker 搞定。完全不用在新机器上装任何 Ruby/Ruby on Rails 依赖。
只要装了 Docker + 有镜像就能跑起来。目前生产环境在用 Docker Swarm。
(注:只有一部分做了容器化,Nginx / 数据库没有进行容器化)
在没有 rvm 或者 rbev 的上古时期,人们是怎么安装 ruby 的呢…
linux 下保证自己依赖装好之后,去 ruby-lang.org 下载 ruby 的源码,然后自己编译,基本上三步 confugure,make,make install 就可以安装好了…我自己有一台服务器上得 pg,ruby 都是这么装的😂
我来顺带问一下有没有人交叉编译过 Ruby,手里有个 Cubieboard,arm 的,性能差,编译一个 ruby 要好久,一直想尝试下交叉编译,不知道有没有坑
为啥不能 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 的目录
可能是说 make install 后很难撤销操作,除非是能够把所有文件都 install 到一个特定的目录,或者是软件包提供了良好的 make uninstall 用于卸载
😂😂我觉得这是 make install 的优点,install 之后只是把编译的文件写到了一个目录,没有影响系统呀,要删除的话直接删掉那个目录就好了…我一般会做几个软连接,这样我就可以在一台机器上装不同版本的 postgres,之所以这么做是有个服务一直用的 pg 8.4 且没法升级(:з」∠) 当然大家现在用 docker 了就没这需求了
没权限,还是别从源代码安装了,依赖是必须的。
你可以让 Linux 服务器管理员给你安装好 Docker Machine,然后用 Docker 来跑 Ruby / Rails
很多人无脑直接装系统,这种情况下就是问题了。如果自己知道改 prefix 当然另当别论。
另外像是你说的 pg,还是要有人盯着官方的安全补丁,勤升级才好。有时候连带其他组件更新也需要重新编译。比如 nginx 可以选择静态编译 OpenSSL,那 OpenSSL 有新的安全更新的时候,就要连带 nginx 一起重新编译了。
而且就算要自己编译,我也是提倡用发行版自己的打包脚本来编译,减少每次编译之间带来的差异。我们这维护一个 nginx mod 版,就是 debian 打包脚本然后用 docker 编译成 deb 包,这样版本更新进度一目了然,而且编译过程 reproducible。