Rails:如何包含gem依赖项?

时间:2010-06-04 05:57:11

标签: ruby-on-rails rubygems dependencies

这是一个菜鸟问题:

如何以我可以将应用程序的目录结构复制到远程位置并让它正常工作的方式将gems添加到我的rails应用程序中,我依赖的所有gem都已安装并可用?

4 个答案:

答案 0 :(得分:1)

面向未来的解决方案是使用Bundler,这是Rails 3中所必需的,现在可以在Rails 2中使用。

答案 1 :(得分:0)

目录中的gems路径是

RAILS_ROOT/vendor/gems

您必须冻结/解压缩此目录中使用的所有宝石

Rails gems及其依赖路径将是

RAILS_ROOT/vendor/rails

所有插件路径都应该是

RAILS_ROOT/vendor/plugins

默认情况下,Rails从机器加载宝石(或者你可以说是本地的)。 要从gems目录加载gem,你必须在tour中添加以下代码 的配置/ enviorment.rb

  config.load_paths += Dir["#{RAILS_ROOT}/vendor/gems/**"].map do |dir| 
    File.directory?(lib = "#{dir}/lib") ? lib : dir
  end

答案 2 :(得分:0)

正如x1a4所说,Bundler是可行的方式,但另一种选择(在短期内更容易)是unpack(冻结)你的宝石。

config/enviroment.rb文件的Rails::Initializer.run do |config|块中,定义您所依赖的宝石,如下所示:

config.gem 'will_paginate', :version => '~> 2.3.11', :source => 'http://gemcutter.org'
config.gem 'nokogiri'

:version:source属性是可选的。)

在命令行中,转到您的应用程序根目录并输入:

rake gems:install
rake gems:unpack

您的宝石应该显示在应用中名为vendor\gems的文件夹中。 (我相信)你的应用会首先自动查看它所需的任何宝石。

不幸的是,如果您想要的gem需要原生扩展,则无法将其解压缩到您的应用中。

答案 3 :(得分:0)

如果要在rails 2.3的非标准位置添加gem,可以在config / environment.rb中添加这些行:

$:.push("/home/_whatever_/ruby/gems")
ENV['GEM_PATH'] = '/home/_whatever_/ruby/gems:/usr/lib/ruby/gems/1.8'

如果您已在hostgator.com上的rails安装中添加了gems,那么这很有用。

为了帮助您的rake任务正常工作,请将这些行添加到.bashrc:

export GEM_HOME=/home/_whatever_/ruby/gems
export GEM_PATH=$GEM_HOME:/usr/lib/ruby/gems/1.8
export PATH=$GEM_HOME/bin:$PATH