2

Apache を使用して自分で作成した Ruby gem をホストする方法がわかりません。誰かが私が問題を理解するのを手伝ってくれるかどうか疑問に思っていました.

これが私がこれまでに行ったことです。独自の「hello world」gem を作成することから始めました (次の手順に従います)。

$ 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         = ["someguy@example.com"]
  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 をビルドし、インストールして実行し、動作することを確認しました。

$ 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」gem をアンインストールして (gemset 全体を空にすることにより)、サーバーから再インストールします。

$ rvm gemset empty currentgemset
Are you SURE you wish to remove the installed gems for gemset 'ruby-1.9.3-p362@currentgemset' (/home/joe/.rvm/gems/ruby-1.9.3-p362@currentgemset)?
(anything other than 'yes' will cancel) > yes

この gem をホストするように 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 が gem をホストするようになり、web ブラウザーを使用して localhost/gems でこのディレクトリに正常にアクセスできます。ただし、Apache サーバーから gem をインストールできません。

$ 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

gem ソースとして 127.0.0.1/gems/ と 0.0.0.0/gems/ も追加しようとしましたが、どちらも問題を解決しません。$ gem generate_index への呼び出しに --legacy フラグを追加するよう誰かに言われましたが、それも機能しません。

4

1 に答える 1