6

操作系统:CentOS 6.2 x86_64
对于缩进的问题,我深表歉意。这是我的第一篇 SO 帖子,我是设置服务器的新手。我正在学习,并将详细说明我为解决这个问题所经历的步骤以及我在哪里寻求帮助。我是一名有抱负的年轻 Web 开发人员,我在其他人配置的服务器上工作,所以这整个体验对我来说是全新的。

我一直在准备我最近购买的一个 linode 来运行一个 rails 应用程序。我按照此处提供的初始安装指南 http://blog.blenderbox.com/2011/01/07/installing-rvm-ruby-rails-passenger-nginx-on-centos/以及更改步骤:
sudo bash < <( curl -L http://bit.ly/rvm-install-system-wide )
反映此 SO 线程RVM 系统范围的安装脚本 url 中建议的更改已损坏 - 什么是替换?

bash -c "bash <( curl -L https://github.com/wayneeseguin/rvm/raw/1.3.0/contrib/install-system-wide ) --version '1.3.0'"

我在安装 ngix 时停止了,因为我使用的是 Apache2。我还确保rvm requirements在安装 rails 之前运行并安装必要的软件包。这是 libyaml 的安装任务,第一个错误发生在我尝试安装它时。但是,yum 报告说它不存在。RVM 和 Gems 的初始安装似乎可以工作,但是我遇到了 Gems 缺少“Psych”的问题,然后要求安装 libyaml:

/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/yaml.rb:56:in '<top (required)>': It seems your ruby installation is missing psych (for YAML output). To eliminate this warning, please install libyaml and reinstall your ruby.

所以我首先尝试通过 Yum 安装 libyaml,但收到此错误:

yum install libyaml
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: centosmirror.quintex.com
* extras: centosmirror.quintex.com
* updates: centosmirror.quintex.com
Setting up Install Process
No package libyaml available.
Error: Nothing to do


尝试安装 libyaml-devel 和 libyaml-dev 时遇到了同样的问题。

在做了一些研究后,我发现 CollectiveIdea 的这篇博客文章详细介绍了相同的问题并提供了解决方案。Collective Idea 的博客文章我按照说明执行了安装,没有任何制作或配置问题。然后我执行了提供的 ruby​​ 重新安装。我仍然收到相同的警告,并进一步搜索了类似问题的 SO。正如对这个问题关于同一问题的回答所详述的那样,如何解决“ruby 安装缺少心理”错误?使用:

rvm pkg install libyaml
Fetching yaml-0.1.4.tar.gz to /usr/local/rvm/archives
Extracting yaml-0.1.4.tar.gz to /usr/local/rvm/src
Prepare yaml in /usr/local/rvm/src/yaml-0.1.4.
Configuring yaml in /usr/local/rvm/src/yaml-0.1.4.
Compiling yaml in /usr/local/rvm/src/yaml-0.1.4.
Installing yaml to /usr/local/rvm/usr

Please note that it's required to reinstall all rubies:

建议通过 RVM 重新安装所有内容,我也按照这些说明进行操作。

rvm reinstall all --force
Removing /usr/local/rvm/src/ruby-1.9.3-p194...
Removing /usr/local/rvm/rubies/ruby-1.9.3-p194...
mv: overwrite `/usr/local/rvm/user/installs'? y
No binary rubies available for: ///ruby-1.9.3-p194.
Continuing with compilation. Please read 'rvm mount' to get more information on binary   rubies.
Installing Ruby from source to: /usr/local/rvm/rubies/ruby-1.9.3-p194, this may take a while depending on your cpu(s)...
ruby-1.9.3-p194 - #downloading ruby-1.9.3-p194, this may take a while depending on your connection...

ruby-1.9.3-p194 - #extracting ruby-1.9.3-p194 to /usr/local/rvm/src/ruby-1.9.3-p194
ruby-1.9.3-p194 - #extracted to /usr/local/rvm/src/ruby-1.9.3-p194
ruby-1.9.3-p194 - #configuring
ruby-1.9.3-p194 - #compiling
ruby-1.9.3-p194 - #installing

即使在此之后,警告仍然存在。我已经验证了 ruby​​ 安装,ruby -v它实际上已安装。libyaml 文件已安装,它们位于此处:

[root@li543-100 ~]# ls -la /usr/local/lib
total 19620
drwxr-xr-x  5 root root     4096 Oct  1 15:40 .
drwxr-xr-x 13 root root     4096 Oct  1 05:55 ..
drwxr-xr-x  2 root root     4096 Oct  1 06:34 include
lrwxrwxrwx  1 root root       16 Oct  1 15:40 libruby.so -> libruby.so.1.9.1
lrwxrwxrwx  1 root root       16 Oct  1 15:40 libruby.so.1.9 -> libruby.so.1.9.1
-rwxr-xr-x  1 root root  7457107 Oct  1 06:42 libruby.so.1.9.1
-rw-r--r--  1 root root 11633486 Oct  1 15:39 libruby-static.a
lrwxrwxrwx  1 root root       18 Oct  1 06:37 libyaml-0.so.2 -> libyaml-0.so.2.0.2
-rwxr-xr-x  1 root root   358698 Oct  1 06:37 libyaml-0.so.2.0.2
-rw-r--r--  1 root root   565584 Oct  1 06:37 libyaml.a
-rwxr-xr-x  1 root root      953 Oct  1 06:37 libyaml.la
lrwxrwxrwx  1 root root       18 Oct  1 06:37 libyaml.so -> libyaml-0.so.2.0.2
drwxr-xr-x  2 root root     4096 Oct  1 06:45 pkgconfig
drwxr-xr-x  6 root root     4096 Oct  1 06:45 ruby
-rw-rw-r--  1 root rvm       194 Oct  1 05:55 rvm

您还可以看到我尝试在 /usr/local/lib 和 /usr/local/rvm/lib 之间创建符号链接,假设 yaml 文件可能已安装到错误的目录或 rvm 没有查找在他们的正确目录中。我在 ruby​​ 上运行了 which 并认为因为 ruby​​ 位于 /rvm 目录中,这可能是问题所在:

[root@li543-100 ~]# which ruby
/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby
[1]: http://collectiveidea.com/blog/archives/2011/10/31/install-ruby-193-with-libyaml-on-centos/ 

这没有帮助。所以我对我出错的地方或我不想要的东西持谨慎态度。
1:我是否将文件放在错误的目录中而导致安装错误?
2: ruby​​ 是否在不同的目录中寻找 libyaml 文件?
3:当我关注博客文章时,我是否未能在安装中添加一些系统特定的功能?

我已经在我的 linode 上重新部署了 CentOS 4 次,希望这是我没有正确遵循脚本的问题,我在第 5 次部署时出现了同样的问题。我目前正在搜索 2 号,希望我的帖子不是不合适的,因为这显然在其他地方得到了解决。我将不胜感激您能提供的任何帮助。

编辑:

因此,在重新部署 CentOS6.2 操作系统后,我运行了更改设置,如下所示:

yum -y install git
yum -y install curl
groupadd rvm
usermod -a -G rvm root
bash -c "bash <( curl -L https://github.com/wayneeseguin/rvm/raw/1.3.0/contrib/install-system-wide) -- version'1.3.0'"
echo '[[ -s "/usr/local/lib/rvm" ]] && . "/usr/local/lib/rvm" #This loads RVM into a shell session' >> ~/.bash_profile
source ~/.bash_profile
yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel
rvm get head
yum install readline readline-devel
rvm package install libyaml -v
rvm install 1.9.3 -v
rvm use 1.9.3
ruby -v 

这也仍然遇到错误:

/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/yaml.rb:56:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.

运行前面的命令从 RVM 获取 libyaml 然后重新安装所有 rubies 似乎并不能解决我的问题。在执行 rvm reinstall all --force 时,之前安装的 libyaml 包会被删除、覆盖还是替换?它似乎位于正确的目录中。

[root@li543-100 src]# pwd
/usr/local/rvm/src
drwxrwsr-x  7 root rvm   4096 Oct  1 21:19 .
drwxrwsr-x 24 root rvm   4096 Oct  1 20:51 ..
drwxr-xr-x 24 root rvm   8192 Oct  1 21:22 ruby-1.9.3-p194
drwxr-xr-x  7  501 games 4096 Apr 27 23:31 rubygems-1.8.24
drwxrwsr-x 18 root rvm   4096 Oct  1 20:51 rvm
drwxrwsrwx  8 root rvm   4096 Oct  1 20:27 yaml-0.1.3
drwxr-xr-x  9 root rvm   4096 Oct  1 21:18 yaml-0.1.4

编辑#2:
在新的 CentOS 5.6 重新部署上再次安装失败后,我显然在安装过程中的某个地方制造了一个致命的缺陷。在表演之前rvm install 1.9.3,我必须跑步rvm install 1.8.7。另外,这次我部署了一个32位的CentOS6.2镜像

在 1.8.7 上运行 gem

[root@li543-100 ~]# gem -v
1.8.24

现在我跑rvm install 1.9.2

[root@li543-100 ~]# rvm use 1.9.2
ruby-1.9.2-p320 is not installed.
To install do: 'rvm install ruby-1.9.2-p320'
[root@li543-100 ~]# rvm install ruby-1.9.2-p320
#CUT OUT INSTALL SHELL PROMPTS ETC
[root@li543-100 ~]# rvm use 1.9.2-p320
Using /usr/local/rvm/gems/ruby-1.9.2-p320
[root@li543-100 ~]# gem -v
1.8.24

切换到 1.9.3:错误返回

[root@li543-100 ~]# rvm use 1.9.3-p194
Using /usr/local/rvm/gems/ruby-1.9.3-p194
[root@li543-100 ~]# gem -v
/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/yaml.rb:56:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
1.8.24

所以看起来告诉 rvm 使用 1.9.3(请注意,我使用的是 -p194,我之前没有测试过这些)在rvm尝试加载 libyaml 的位置方面会导致某种通信问题。现在我将使用 1.9.2,因为其中大部分内容都让我有点不知所措。我确定我在缺少 1.9.3 所需的某种依赖或未适当调整配置文件方面犯了一个错误。至少这是我的假设,第一个服务器设置这么多一直在猜测。

4

3 回答 3

3

我已经单独构建了 libyaml,并且基本上经历了上述步骤的各种排列,结果相同。我运行了 irb,发现它没有找到 libyaml.so。无奈之下,我将 /usr/local/lib/libyaml*(我之前构建的)复制到 ~/.rvm/rubies/ruby-1.9.3-p327/lib。

这平息了警告。

于 2012-11-16T22:02:21.183 回答
2

经过多次试验,下面修复我

# rvm pkg install libyaml
# rvm reinstall all --force
# ln -s /usr/local/rvm/usr/lib/libyaml.so /usr/local/rvm/lib/
# ln -s /usr/local/rvm/usr/lib/libyaml-0.so.2 /usr/local/rvm/lib/
# ln -s /usr/local/rvm/usr/lib/libyaml-0.so.2 /usr/local/rvm/rubies/ruby-1.9.3-p327/lib
# ln -s /usr/local/rvm/usr/lib/libyaml.so /usr/local/rvm/rubies/ruby-1.9.3-p327/lib

我的环境

# cat /etc/redhat-release
CentOS release 5.8 (Final)

# ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [i686-linux]

# gem -v
1.8.24

# rvm -v

rvm 1.16.20 (latest) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
于 2012-11-22T08:24:33.590 回答
1

删除所有 rvm、ruby、libyaml 等。

比安装 rvm,而且只使用 rvm 来安装 libyaml 和 rubies。

(还要注意 Ruby 可以查找 32 位库,因此请检查是否有 32 位的版本,或者是否有单独的 64 位库的 lib 文件夹!)

PS去检查heroku托管你的应用程序。非常适合初学者,因为它是免费的,并且 5 分钟即可设置(从安装 rails 到 rails 在 heroku 上自动生成的网页需要 15 分钟!)。而且您不需要更改配置,因此在您的服务器上部署不会更难。

于 2012-10-01T19:28:49.207 回答