2013-04-04 131 views
2

我无法弄清楚如何使用Apache承载我自己创建的Ruby宝石。我想知道是否有人能帮我弄清楚问题所在。使用Apache承载Ruby宝石

这是我到目前为止已经完成。我开始通过创建自己的“Hello World”宝石(按照these instructions):

$ bundle gem helloearth 

$ cat lib/helloearth.rb 
require "helloearth/version" 

module Helloearth 
    def self.hi 
    puts "hello world" 
    end 
end 

$ cat helloearth.gemspec 
# coding: utf-8 
lib = File.expand_path('../lib', __FILE__) 
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 
require 'helloearth/version' 

Gem::Specification.new do |spec| 
    spec.name   = "helloearth" 
    spec.version  = Helloearth::VERSION 
    spec.authors  = ["Some Guy"] 
    spec.email   = ["[email protected]"] 
    spec.description = %q{a gem description} 
    spec.summary  = %q{a gem summary} 
    spec.homepage  = "http://www.example.com" 
    spec.license  = "MIT" 

    spec.files   = `git ls-files`.split($/) 
    spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } 
    spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) 
    spec.require_paths = ["lib"] 

    spec.add_development_dependency "bundler", "~> 1.3" 
    spec.add_development_dependency "rake" 
end 

然后我建立了创业板,安装并运行它以验证它的工作原理:

$ gem build helloearth.gemspec 
    Successfully built RubyGem 
    Name: helloearth 
    Version: 0.0.1 
    File: helloearth-0.0.1.gem 

$ gem install ./helloearth-0.0.1.gem 
Successfully installed helloearth-0.0.1 
1 gem installed 
Installing ri documentation for helloearth-0.0.1... 
Installing RDoc documentation for helloearth-0.0.1... 

$ irb 
1.9.3-p362 :001 > require 'helloearth' 
=> true 
1.9.3-p362 :002 > Helloearth.hi 
hello world 
=> nil 

它的工作原理!现在,我要卸载我的“Hello World”宝石(通过清空整个宝石),然后从服务器重新安装:

$ rvm gemset empty currentgemset 
Are you SURE you wish to remove the installed gems for gemset '[email protected]' (/home/joe/.rvm/gems/[email protected])? 
(anything other than 'yes' will cancel) > yes 

我需要设置Apache举办这种宝石。我在http://docs.rubygems.org/read/chapter/18#page81这样做是按照指示:

$ sudo mkdir /var/www/gems 
$ sudo cp helloearth-0.0.1.gem /var/www/gems 
$ rvmsudo gem generate_index -d /var/www/gems/ 
Warning: can not check `/etc/sudoers` for `secure_path`, falling back to call via `/usr/bin/env`, this breaks rules from `/etc/sudoers`. export rvmsudo_secure_path=1 to avoid the warning.Generating Marshal quick index gemspecs for 0 gems 

Complete 
Generated Marshal quick index gemspecs: 0.000s 
Generating Marshal master index 
Generated Marshal master index: 0.000s 
Generating specs index 
Generated specs index: 0.000s 
Generating latest specs index 
Generated latest specs index: 0.000s 
Generating prerelease specs index 
Generated prerelease specs index: 0.000s 
Compressing indicies 
Compressed indicies: 0.001s 

$ ls /var/www/gems 
helloearth-0.0.1.gem Marshal.4.8.Z   specs.4.8 
latest_specs.4.8  prerelease_specs.4.8  specs.4.8.gz 
latest_specs.4.8.gz prerelease_specs.4.8.gz 
Marshal.4.8   quick 

Apache是​​目前托管的宝石,我可以用我的网页浏览器在本地主机/宝石成功访问这个目录。不过,我无法从Apache服务器安装我的宝石:

$ gem sources -a http://localhost/gems/ 
http://localhost/gems/ added to sources 

$ gem sources 
*** CURRENT SOURCES *** 

http://rubygems.org/ 
http://localhost/gems/ 

cd ~ # leave the directory which holds the local copy of the gem to force use of the Apache server 

$ gem install helloearth 
ERROR: Could not find a valid gem 'helloearth' (>= 0) in any repository 
ERROR: Possible alternatives: hello_bar, hello_ext, hellogr, helloh, hellolorem 

我也尝试添加127.0.0.1/gems/和0.0.0.0/gems/作为宝石的来源,但没有解决问题。有人告诉我将--legacy标志添加到$ gem generate_index的调用中,但这也不起作用。

+1

你配置了apache来从/ var/www/gems提供文件吗? – 2013-04-04 16:33:12

+0

@Frederick Cheung没有明确说明,但这些文件的提供证明了我可以在我的网络浏览器中看到它们,就像我在文章中提到的那样 – user2245766 2013-04-04 16:35:55

回答