Difference between revisions of "Ruby (简体中文)"

From ArchWiki
Jump to: navigation, search
(see if page works)
 
m (Bundler)
(13 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[Category:Programming language]]
+
[[Category:Programming languages (简体中文)]]
 +
[[en:Ruby]]
 
[[ja:Ruby]]
 
[[ja:Ruby]]
[[en:Ruby]]
+
{{TranslationStatus (简体中文)|Ruby|2013-04-30|255724}}
Ruby is a dynamic, interpreted, open source programming language with a focus on simplicity and productivity.
+
 
 +
Ruby 是一门专注于简洁和生产里的动态语言, 是解释型语言, 开源编程语言.
  
== Installing Ruby ==
+
== 安装 Ruby ==
The version of Ruby you need to install depends on your requirements. If you are supporting a legacy application, install Ruby 1.9 or 1.8 as necessary. If you are starting a new project, Ruby 2.0 is recommended. Below is a summary of the available versions and how to get them.
+
按照需要来选择安装 Ruby 的版本. 为了支持遗留下来的软件, 必要时请安装 Ruby 1.9 甚至 1.8. 开展新项目建议 Ruby 2.0 .以下是一个概要, 关于当前有的版本和如何获取.
  
 
=== Ruby 2.0 ===
 
=== Ruby 2.0 ===
To install Ruby 2.0.0, install {{Pkg|ruby}}. Ruby 2.0 includes [[#RubyGems]].
+
要安装 Ruby 2.0.0, 安装 {{Pkg|ruby}} 这个包. Ruby 2.0 包含了 [[#RubyGems]].
  
 
=== Ruby 1.9 ===
 
=== Ruby 1.9 ===
To install Ruby 1.9.3, install {{Pkg|ruby1.9}}. Ruby 1.9 includes RubyGems.
+
要从 [[AUR]] 安装 Ruby 1.9.3, 安装 {{AUR|ruby1.9}}. Ruby 1.9 包含了 RubyGems.
  
Pros:
+
=== 多版本 ===
* Vastly improved performance over 1.8
+
如果你要在同一个系统安装多个版本 (比如 2.0.0-p0 1.9.3-p392), 最简单的办法时安装 [[RVM]] 或者 [[rbenv]].
* New features for concurrency such as fibers.
 
* Various other language improvements, such as an improved CSV parser.
 
 
 
Cons:
 
* Not compatible with many older gems (and Ruby On Rails versions prior to 2.3)
 
* Changes in the language might cause older Ruby code not to run, or exhibit unexpected bugs.
 
 
 
{{Note|Visit http://isitruby19.com/ to determine if the gems/modules you require are compatible with Ruby 1.9.}}
 
 
 
=== Ruby 1.8 ===
 
To install Ruby 1.8.7, install {{AUR|ruby1.8}} or {{AUR|ruby-1.8.7-svn}} from the [[AUR]]. Ruby 1.8 does not include RubyGems. Instead, it is available through the {{AUR|rubygems1.8}} package.
 
 
 
=== Multiple Versions ===
 
If you want to run multiple versions on the same system (e.g. 2.0.0-p0 and 1.9.3-p392), the easiest way is to use [[RVM]] or [[rbenv]].
 
  
 
== RubyGems ==
 
== RubyGems ==
''gem'' is a package manager for Ruby modules (called Gems), somewhat comparable to what [[pacman]] is to Arch Linux. The ''gem'' command will be installed if you followed the installation instructions above.
+
''gem'' Ruby 模块 (叫做 Gems) 的包管理器, 某种程度上是 [[pacman]] 相对于 Arch Linux 的角色. ''gem'' 命令你可以通过遵循上边的操作来得到.
  
=== Usage ===
+
=== 用例 ===
To see what gems are installed:
+
查看已安装有那些 gem:
 
  $ gem list
 
  $ gem list
  
To get information about a gem:
+
获取某个 gem 的详细信息:
 
  $ gem spec <gem_name>
 
  $ gem spec <gem_name>
  
By default, {{ic|gem list}} and {{ic|gem spec}} use the {{ic|--local}} option, which forces ''gem'' to search only the local system. This can be overridden with the {{ic|--remote}} flag. Thus, to search for the mysql gem:
+
默认情况下, {{ic|gem list}} {{ic|gem spec}} 开启了 {{ic|--local}} 选项, 导致 ''gem'' 只会在本地系统里进行搜索. 这可以用 {{ic|--remote}} 参数来覆盖. 这样子以后, 来搜索一个 mysql gem:
 
  $ gem list --remote mysql
 
  $ gem list --remote mysql
  
To install a gem:
+
安装一个 gem:
 
  $ gem install mysql
 
  $ gem install mysql
  
The process can be sped up somewhat if you do not need local documentation:
+
安装过程可以加快一点, 如果你不需要本地的文档的话:
 
  $ gem install mysql --no-rdoc --no-ri
 
  $ gem install mysql --no-rdoc --no-ri
  
To update all installed gems:
+
更新所有已安装的 gem:
 
  $ gem update
 
  $ gem update
  
=== Running as normal user ===
+
=== 普通用户身份运行 ===
When running ''gem'' as a normal user, gems are installed into {{ic|~/.gem}} instead of system-wide. This is considered the best way to manage gems on Arch. Unfortunately, not all gems are happy with being installed in this way, and might insist on being installed by root, especially if they have native extensions (compiled C code). This per-user behavior is enabled via {{ic|/etc/gemrc}} and can be overridden by a {{ic|~/.gemrc}} file.
+
作为普通用户安装 ''gem'' 的时候, gem 默认被安装在 {{ic|~/.gem}} 而不是在系统全局. 这在 Arch 上被认为是做回的管理 gem 的方案. 不巧的是并非所有 gem 都乐意被安装在这, 甚至可能坚持要以 root 身份安装, 特别是模块含有本地扩展(C 编译的代码). 每个用户的方案被配置在 {{ic|/etc/gemrc}} 文件里, 可以通过配置 {{ic|~/.gemrc}} 文件来改变.
 +
 
 +
为了使用一些安装了可执行文件的 gem, 需要把 {{ic|$(ruby -e 'print Gem.user_dir')/bin}} 添加到你的 {{ic|$PATH}} 环境变量里.如果以上命令无法生效, 可以使用下面命令代替:
 +
 
 +
  #Setting the GEM_PATH and GEM_HOME variables may not be necessary, check 'gem env' output to verify whether both variables already exist
 +
  GEM_HOME=$(ls -t -U | ruby -e 'puts Gem.user_dir')
 +
  GEM_PATH=$GEM_HOME
 +
  export PATH=$PATH:$GEM_HOME/bin
  
To use gems which install binaries, you need to add {{ic|~/.gem/ruby/2.0.0/bin}} to your {{ic|$PATH}}.
 
  
=== Running as root ===
+
=== root 身份运行 ===
When running as root, the gems will be installed into {{ic|/root/.gems}} and will '''not''' be installed to {{ic|/usr/lib/ruby/gems/}}.
+
root 身份运行时 gem 会被安装在 {{ic|/root/.gems}}, 而且'''不会'''被安装到 {{ic|/usr/lib/ruby/gems/}}.
  
{{Note|See bug #[https://bugs.archlinux.org/task/33327 33327] for more information.}}
+
{{注意|访问 bug #[https://bugs.archlinux.org/task/33327 33327] 查看更多信息.}}
  
[[Ruby#Bundler|Bundler]] solves these problems to some extent by packaging gems into your application. See the section below on using bundler.
+
[[Ruby#Bundler|Bundler]] 通过把模块打包到你的项目目录, 一定程度上解决了这些问题. 细节看下面关于使用 bundler.
  
 
=== Bundler ===
 
=== Bundler ===
[http://github.com/carlhuda/bundler Bundler] allows you to specify which gems your application depends upon, and optionally which version those gems should be. Once this specification is in place, Bundler installs all required gems (including the full gem dependency tree) and logs the results for later inspection. By default, Bundler installs gems into a shared location, but they can also be installed directly into your application. When your application is run, Bundler provides the correct version of each gem, even if multiple versions of each gem have been installed. This requires a little bit of work: applications should be called with {{ic|bundle exec}}, and two lines of boilerplate code must be placed in your application's main executable.
+
[http://github.com/carlhuda/bundler Bundler] 帮助你指定你的项目需要使用哪些 gem, 还有可选地指定哪个版本被需要. 当声明恰当时, Bundler 会安装所有依赖的 gem (包括整个依赖树), 后期检查之后还会打印出 log. Bundler 默认是安装 gem 到一个共享的路径, 不过也可以指定直接安装到你的应用. 当你项目运行的时候, Bundler 就提供每个 gem 正确的版本, 即便安装的 gem 其实有多个版本. 这需要有一点工作: 应用需要以 {{ic|bundle exec}} 命令运行, 还有两行的 boilerplate 代码要被写在你的应用的可执行文件里.
  
To install Bundler:
+
安装 Bundler:
 
  $ gem install bundler
 
  $ gem install bundler
  
By default, Bundler installs gems system-wide, which is contrary to the behaviour of ''gem'' itself on Arch. To correct this, add the following to your {{ic|~/.bashrc}}:
+
Bundler 默认把 gem 安装在系统全局, 这跟 Arch 上处理 ''gem'' 的方案正好相反. 纠正的办法的话, 添加下面的配置到你的 {{ic|~/.bashrc}}:
 
  export GEM_HOME=~/.gem/ruby/2.0.0
 
  export GEM_HOME=~/.gem/ruby/2.0.0
  
To start a new bundle:
+
新建一个 bundle:
 
  $ bundle init
 
  $ bundle init
  
Then edit {{ic|Gemfile}} in the current directory (created by bundle init) and list your required gems:
+
然后编辑当前目录 (gem init 执行的目录)下的 {{ic|Gemfile}} 添加你需要的 gem:
 +
 
 
{{hc|Gemfile|
 
{{hc|Gemfile|
 
gem "rails", "3.2.9"
 
gem "rails", "3.2.9"
Line 82: Line 77:
 
}}
 
}}
  
Run the following to install gems into {{ic|GEM_HOME}}:
+
运行下面的命令安装需要的 gem 到 {{ic|GEM_HOME}}:
 
  $ bundle install
 
  $ bundle install
  
Alternatively, run the following to install gems to {{ic|.bundle}} in the working directory:
+
或者作为可选方案, 运行下面的命令把 gem 安装到工作路径的 {{ic|.bundle}}:
 
  $ bundle install --path .bundle
 
  $ bundle install --path .bundle
  
Don't forget to edit your main executable:
+
别忘了要编辑你主要的执行文件:
 
{{bc|#!/usr/bin/env ruby
 
{{bc|#!/usr/bin/env ruby
  
Line 99: Line 94:
 
}}
 
}}
  
Finally, run your program:
+
最后运行你的程序:
 
{{bc|bundle exec <main_executable_name.rb>}}
 
{{bc|bundle exec <main_executable_name.rb>}}
  
== Managing RubyGems using pacman ==
+
== 用 pacman 管理 RubyGems ==
  
Instead of managing gems with {{ic|gem}}, you can use {{ic|pacman}}, or some [[AUR]] helper. Ruby packages follow the naming convention ruby-[gemname]. This option provides the following advantages:
+
除了用 {{ic|gem}} 命令管理 gem, 也可以用 {{ic|pacman}}, 或者一些 [[AUR]] 帮助工具. Ruby 模块遵循这样的命名惯例 ruby-[gemname]. 这个方案提供了以下的优点:
  
* Gems are updated along with the rest of your system. As a result, you never need to run {{ic|gem update}}: {{ic|pacman -Syu}} suffices.
+
* Gems 和你系统其他部分一样被升级. 这样你就不用去运行 {{ic|gem update}}: 运行 {{ic|pacman -Syu}} 足够了.
* Installed gems are available system-wide, instead of being available only to the user who installed them.
+
* 已安装的 gem 在全系统可用, 而不是只有安装了这些 gem 的用户.
  
If a gem is not available in the repositories, you can use {{AUR|pacgem}} to automatically create a package, which can then be installed by pacman.
+
如果 gem 在仓库里没有, 你可以用 {{AUR|pacgem}} 自动创建一个, 这个模块接下来就能直接用 pacman 来安装.
  
== See also ==
+
== 又见 ==
* [[Ruby On Rails]]
+
* [[Ruby on Rails]]
  
== References ==
+
== 引用 ==
 
* Ruby - http://ruby-lang.org/
 
* Ruby - http://ruby-lang.org/
 
* Rubyforge - http://rubyforge.org
 
* Rubyforge - http://rubyforge.org
 
* Bundler - http://github.com/carlhuda/bundler
 
* Bundler - http://github.com/carlhuda/bundler

Revision as of 02:12, 27 May 2017

翻译状态: 本文是英文页面 Ruby翻译,最后翻译时间:2013-04-30,点击这里可以查看翻译后英文页面的改动。

Ruby 是一门专注于简洁和生产里的动态语言, 是解释型语言, 开源编程语言.

安装 Ruby

按照需要来选择安装 Ruby 的版本. 为了支持遗留下来的软件, 必要时请安装 Ruby 1.9 甚至 1.8. 开展新项目建议 Ruby 2.0 .以下是一个概要, 关于当前有的版本和如何获取.

Ruby 2.0

要安装 Ruby 2.0.0, 安装 ruby 这个包. Ruby 2.0 包含了 #RubyGems.

Ruby 1.9

要从 AUR 安装 Ruby 1.9.3, 安装 ruby1.9AUR. Ruby 1.9 包含了 RubyGems.

多版本

如果你要在同一个系统安装多个版本 (比如 2.0.0-p0 和 1.9.3-p392), 最简单的办法时安装 RVM 或者 rbenv.

RubyGems

gem 是 Ruby 模块 (叫做 Gems) 的包管理器, 某种程度上是 pacman 相对于 Arch Linux 的角色. gem 命令你可以通过遵循上边的操作来得到.

用例

查看已安装有那些 gem:

$ gem list

获取某个 gem 的详细信息:

$ gem spec <gem_name>

默认情况下, gem listgem spec 开启了 --local 选项, 导致 gem 只会在本地系统里进行搜索. 这可以用 --remote 参数来覆盖. 这样子以后, 来搜索一个 mysql gem:

$ gem list --remote mysql

安装一个 gem:

$ gem install mysql

安装过程可以加快一点, 如果你不需要本地的文档的话:

$ gem install mysql --no-rdoc --no-ri

更新所有已安装的 gem:

$ gem update

普通用户身份运行

作为普通用户安装 gem 的时候, gem 默认被安装在 ~/.gem 而不是在系统全局. 这在 Arch 上被认为是做回的管理 gem 的方案. 不巧的是并非所有 gem 都乐意被安装在这, 甚至可能坚持要以 root 身份安装, 特别是模块含有本地扩展(从 C 编译的代码). 每个用户的方案被配置在 /etc/gemrc 文件里, 可以通过配置 ~/.gemrc 文件来改变.

为了使用一些安装了可执行文件的 gem, 需要把 $(ruby -e 'print Gem.user_dir')/bin 添加到你的 $PATH 环境变量里.如果以上命令无法生效, 可以使用下面命令代替:

 #Setting the GEM_PATH and GEM_HOME variables may not be necessary, check 'gem env' output to verify whether both variables already exist 
 GEM_HOME=$(ls -t -U | ruby -e 'puts Gem.user_dir')
 GEM_PATH=$GEM_HOME
 export PATH=$PATH:$GEM_HOME/bin


以 root 身份运行

以 root 身份运行时 gem 会被安装在 /root/.gems, 而且不会被安装到 /usr/lib/ruby/gems/.

注意: 访问 bug #33327 查看更多信息.

Bundler 通过把模块打包到你的项目目录, 一定程度上解决了这些问题. 细节看下面关于使用 bundler.

Bundler

Bundler 帮助你指定你的项目需要使用哪些 gem, 还有可选地指定哪个版本被需要. 当声明恰当时, Bundler 会安装所有依赖的 gem (包括整个依赖树), 后期检查之后还会打印出 log. Bundler 默认是安装 gem 到一个共享的路径, 不过也可以指定直接安装到你的应用. 当你项目运行的时候, Bundler 就提供每个 gem 正确的版本, 即便安装的 gem 其实有多个版本. 这需要有一点工作: 应用需要以 bundle exec 命令运行, 还有两行的 boilerplate 代码要被写在你的应用的可执行文件里.

安装 Bundler:

$ gem install bundler

Bundler 默认把 gem 安装在系统全局, 这跟 Arch 上处理 gem 的方案正好相反. 纠正的办法的话, 添加下面的配置到你的 ~/.bashrc:

export GEM_HOME=~/.gem/ruby/2.0.0

新建一个 bundle:

$ bundle init

然后编辑当前目录 (gem init 执行的目录)下的 Gemfile 添加你需要的 gem:

Gemfile
gem "rails", "3.2.9"
gem "mysql"

运行下面的命令安装需要的 gem 到 GEM_HOME:

$ bundle install

或者作为可选方案, 运行下面的命令把 gem 安装到工作路径的 .bundle:

$ bundle install --path .bundle

别忘了要编辑你主要的执行文件:

#!/usr/bin/env ruby

# "This will automatically discover your Gemfile, and make all of the gems in
# your Gemfile available to Ruby." http://gembundler.com/v1.3/rationale.html
require 'rubygems'
require 'bundler/setup'

...

最后运行你的程序:

bundle exec <main_executable_name.rb>

用 pacman 管理 RubyGems

除了用 gem 命令管理 gem, 也可以用 pacman, 或者一些 AUR 帮助工具. Ruby 模块遵循这样的命名惯例 ruby-[gemname]. 这个方案提供了以下的优点:

  • Gems 和你系统其他部分一样被升级. 这样你就不用去运行 gem update: 运行 pacman -Syu 足够了.
  • 已安装的 gem 在全系统可用, 而不是只有安装了这些 gem 的用户.

如果 gem 在仓库里没有, 你可以用 pacgemAUR 自动创建一个, 这个模块接下来就能直接用 pacman 来安装.

又见

引用