4

我相信这真的很明显,但我对 ruby​​ 还是很陌生。我想使用 rake / albacore 来自动化一些任务。我想使用捆绑器将其打包以在我的构建服务器上使用。现在我想做一个使用 mixlib-shellout 模拟系统帐户的愚蠢任务。为此,我有以下 Gemfile:

source 'http://rubygems.org'
gem 'mixlib-shellout'
gem 'rake'

和以下 rake 文件:

require 'rubygems'
require 'bundler/setup'

require 'mixlib/shellout'

task :default do
    whomai = Mixlib::ShellOut.new("whoami.exe", :user => "username", :domain => "DOMAIN", :password => "password")
    whoami.run_command
end

我跑

bundle install

而且我只看到 rake 正在安装... Gemfile.lock dep 树中没有其他依赖项...这正常吗?

PS C:\Users\Ben\src\ruby_test> bundle install
Fetching gem metadata from http://rubygems.org/...........
Fetching gem metadata from http://rubygems.org/..
Resolving dependencies...
Installing rake (10.1.0)
Using bundler (1.3.5)
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.

然后我跑

bundle exec rake

我得到回报

rake aborted!
cannot load such file -- mixlib/shellout
C:/Users/Ben/src/ruby_test/rakefile.rb:4:in `require'
C:/Users/Ben/src/ruby_test/rakefile.rb:4:in `<top (required)>'
(See full trace by running task with --trace)

我正在使用 ruby​​ 2.0 和 bundler 1.3.5

感激地收到任何帮助。

4

1 回答 1

1

我建议使用 *.gemspec 文件设置您的 gem。为此,您的 Gemfile 变得非常简单:

source 'https://rubygems.org'
gemspec

然后编写一个新文件“GEM_NAME.gemspec”。这是一个例子:

Gem::Specification.new do |spec|
  spec.name          = GAME_NAME
  spec.version       = VERSION
  spec.authors       = AUTHORS
  spec.email         = EMAILS
  spec.summary       = SUMMARY
  spec.description   = DESCRIPTION
  spec.homepage      = HOMEPAGE

  spec.files         = Dir['rakefile.rb', '*.gemspec']
  spec.files         += Dir['bin/**', 'lib/**/*.rb']

  spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
  spec.require_paths = ["lib"]

  spec.add_runtime_dependency "ruby-terminfo", "~> 0.1"

  spec.add_development_dependency "bundler", "~> 1.7"
  spec.add_development_dependency "rake", "~> 10.0"
end

您需要spec.add_runtime_dependency为每个依赖的 gem 添加一个单独的。上面的示例包括“ruby-terminfo”gem。

此外,您需要设置spec.files字段以反映 gem 的文件和文件夹结构。

有关详细信息,请参阅RubyGem 指南

于 2015-07-10T17:11:06.120 回答