我有一个 CentOS 5.5(64 位服务器)
我想安装 Ruby 1.8.7(当前补丁级别)和 RubyGems
解决这个问题的最佳方法是什么?
免责声明:我是 CentOS 菜鸟
我在 Ubuntu 10.10 上使用 rubygems (1.3.7) 和需要 root 权限的 gem。当我将我的设置与安装了 rubygems 1.3.6 的 ubuntu 9.10 进行比较时,我看到以下差异gem environment
:
1.3.7 / 10.10 - EXECUTABLE DIRECTORY: /var/lib/gems/1.8/bin
1.3.6 / 09.10 - EXECUTABLE DIRECTORY: /usr/bin
无论我是否使用,输出都是相同的sudo
。为了解决这个问题(我不知道为什么它首先不同),我尝试修改我的路径变量。
我的问题是,在哪里sudo
寻找可执行文件?如果我安装 gem(使用sudo
),则可执行文件/var
显然放在路径中。我将此路径添加到我的~/.profile
和/etc/environment
文件中,但我无法sudo
执行可执行文件。
如果我运行:
$ gemname
它正确运行我的工具。$ sudo gemname
它只是告诉我command not found
。$ sudo echo $PATH
它确实显示了正确的路径。$ sudo -i gemname
它运行正确。$ sudo sudo -V
显示 PATH …在系统范围的 RVM 中......这是我的 /etc/gemrc
---
gem:--no-ri --no-rdoc
Run Code Online (Sandbox Code Playgroud)
这是系统 gem env
GEM PATHS:
- /usr/lib/ruby/gems/1.9.1
- /home/${USER}/.gem/ruby/1.9.1
GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- "gem" => "--no-ri --no-rdoc"
Run Code Online (Sandbox Code Playgroud)
这是 rvm 中的那个
GEM PATHS:
- /usr/local/rvm/gems/ruby-1.9.2-p180
- /usr/local/rvm/gems/ruby-1.9.2-p180@global
GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
Run Code Online (Sandbox Code Playgroud)
和 rvm @global
GEM PATHS:
- …
Run Code Online (Sandbox Code Playgroud) 在使用乘客 + apache 设置服务器以在 Rails 上托管 ruby 时,我应该在哪里划清使用 apt-get 和 gem 之间的界限?
它甚至重要吗?
在考虑软件更新等时混合包管理系统感觉是错误的。
应该怎么做呢?
我们已经通过下载 rubygems tar.gz 存档并运行 setup.rb 命令在 Debian 系统上安装了 rubygem 应用程序(版本 1.3.6)。
卸载此应用程序的最佳方法是什么?
我目前正在研究 Ruby/Ruby on Rails 作为 Python/Django 的替代品。我的主要问题是,在 Linux 上安装 Ruby gems 和/或 Ruby on Rails 项目时,特别是一般的 dist 或 Gentoo 的最佳实践是什么还不清楚。
在 Gentoo 中,开发人员倾向于打包 gem。这是通过 portage 而不是 gem 安装它们的首选方式。但是我不知道这是否是正确的方法,因为您将始终缺少主要项目及其依赖项,您要么必须为其编写自己的 ebuild(没什么大不了的)并对其进行维护。那时我看不到任何更多优势,因为一旦我编写了自己的 ebuild,我就必须密切关注包以进行新的开发,因为包不会有任何神奇的颠簸。:-) 此外,Ruby 世界是一个快速移动的目标,并不是 dist 树中的所有打包 gem 都真正跟上速度。
另一方面,直接通过 Bundler 或直接通过 gem 包管理器安装似乎也有点不稳定。如果您不小心,您会绕过 diss 包管理器并有两个相互竞争的管理器。例如,dist 更新到 Ruby 1.9.4 并引入了一些特定于 dist 的特性和一些 gems 意外损坏。然而,他们为它修补了自己的包装宝石。或者,如果您使用 Bundler,项目在其依赖项的版本方面往往相当严格,因此,即使某个依赖项的安全更新可用,您也可能无法获得它,因为该项目明确指定了一个版本。所以你必须再次手动跳入。
现在,我很感激社区对处理此类事情的正确方法 (TM) 以及如何在生产服务器上正确维护 Ruby/Ruby on Rails 基础和多个项目(包括第三方项目)的意见。
请注意,这不是关于如何部署项目/应用程序。这是关于维护的最佳实践...
我想将从 git 获取的 ruby 程序打包到 RPM 包中。我有一个构建服务器和一个生产服务器(相同的操作系统/相同的架构)。
与大多数 ruby 项目一样,我的项目确实有 gem 依赖项。
我找到了两种做我想做的事情的方法,我想知道哪一种是最好的 - 大多数 UNIX/Linux 哲学 - 操作方面
第一个(对我来说看起来更好)是做一个bundle install --standalone --deployment --path %{buildroot}/usr/lib/rubygems/1.8/gems/ --binstubs %{buildroot}/usr/lib/rubygems/1.8.bin
. 这会将 gem 安装在将部署 .rpm 的服务器上的 gem 系统路径上,无需安装捆绑包。我不确定的是,当我使用相同的 gem 安装其他 rpm 时会发生什么?当我删除一个带有在两个包之间共享的 gem 的包时,会发生什么?
该bundle install --deployment
命令将直接在项目本身中执行。这样就可以在目录中找到所有内容vendor/
。在网上我可以看到一些关于供应商一切政策的帖子,它似乎不正确的操作明智,因为很多宝石将被重复。由于我没有红宝石背景,我不知道它的确切优点/缺点
如果有人已经做了类似的事情,你会采取哪一种方式?从运营角度来看,什么才是最好的解决方案?
我有一个 puppet 安装,我试图在其中检查雾版本(用于云配置),但没有得到响应,所以我认为它没有安装。我需要雾才能利用 puppet 的 vmware 克隆能力。无论如何,似乎雾是通过 ruby gems 安装的,但是当我查看fog.io 时,它与我看到的其中涉及 php/apache/mysql 等的雾 wiki 页面并不相似,并且没有提及.fog 文件。因此,我正在努力确保我为我的人偶配置安装了正确的雾。
我在 64 位 CentOS 机器上安装 mysql ruby gem 时遇到问题。
[jacekb@vitaidealn ~]$ uname -a
Linux vitaidealn.local 2.6.18-92.el5 #1 SMP Tue Jun 10 18:51:06 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
安装了 Mysql 和 mysql-devel 包。Mysql_config 提供以下路径:
Usage: /usr/lib64/mysql/mysql_config [OPTIONS]
Options:
--cflags [-I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv]
--include [-I/usr/include/mysql]
--libs [-L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib64 -lssl -lcrypto]
--libs_r [-L/usr/lib64/mysql -lmysqlclient_r -lz -lpthread -lcrypt -lnsl -lm -lpthread -L/usr/lib64 -lssl -lcrypto]
--socket [/var/lib/mysql/mysql.sock]
--port …
Run Code Online (Sandbox Code Playgroud)