4

現時点では問題なく動作するバンドラーを使用するアプリケーションがありますが、プロジェクトの bin ディレクトリから実行する必要があります。今、私はそれを宝石に変換しようとしています。

bin/myexecutable(変更なし):

#!/usr/bin/env ruby
require 'mygem'
MyGem::MyExecutable.new.main(ARGV)

lib/mygem.rb(変更なし):

require 'rubygems'
require 'bundler/setup'
Bundler.require

require 'mygem/version'
require 'mygem/my_executable'

mygem.gemspec(新着):

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

Gem::Specification.new do |spec|
  # ... omitting boilerplate specs of gem ...

  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'

  spec.add_runtime_dependency 'bindata'
end

Gemfile(依存関係を mygem.gemspec に移動):

source 'https://rubygems.org'
gemspec

gem をインストールして実行可能ファイルを実行しようとすると、次のようになります。

.../resource_file.rb:2:in `<class:ResourceFile>': uninitialized constant ResourceFile::BinData (NameError)

依存関係をコピーして戻すとGemfile、再び機能しますが、同じ依存関係の宣言が 2 つの場所で重複しています。

gemspec宣言を使用すると機能しないのはなぜですか?

4

1 に答える 1