标签: ruby

为什么Rake不能连续调用多个任务?

我有一个Rake任务,我在下面简化了.我在Windows上使用Ruby 1.9.

也许您想猜测下面调用Rake任务"list_all_levels"的结果?它应该是:

"Hello level 1"
"Hello level 2"
"Hello level 3"
Run Code Online (Sandbox Code Playgroud)

但由于我不知道的原因,它只打印"Hello level 1"然后停止.

也就是说,它始终只调用第一个任务.如果我更改第一行以传递arg"42",它将打印"Hello level 42"然后停止.

我想知道为什么它不会调用任务3次并打印所有3行?有没有办法让它按照我的期望工作?

task :list_all_levels => [] do
    Rake::Task[:list].invoke 1
    Rake::Task[:list].invoke 2
    Rake::Task[:list].invoke 3
end

task :list, [:level] => [] do |t, args|
    puts "Hello level #{args.level}"
end
Run Code Online (Sandbox Code Playgroud)

ruby rake task

37
推荐指数
2
解决办法
1万
查看次数

在Ruby中导出环境变量

如何将Ruby脚本中的环境变量导出到父shell?例如,实现readBash内置的天真实现:

#!/usr/bin/ruby

varname = ARGV[0]
ENV[varname] = STDIN.gets  # but have varname exported to the parent process
Run Code Online (Sandbox Code Playgroud)

ruby environment-variables

37
推荐指数
3
解决办法
4万
查看次数

为Ruby模块中的每个方法调用执行代码

我正在Ruby 1.9.2中编写一个定义了几个方法的模块.当调用这些方法中的任何一个时,我希望它们中的每一个首先执行某个语句.

module MyModule
  def go_forth
    a re-used statement
    # code particular to this method follows ...
  end

  def and_multiply
    a re-used statement
    # then something completely different ...
  end
end
Run Code Online (Sandbox Code Playgroud)

但我想避免a re-used statement在每个方法中明确地放置该代码.有办法吗?

(如果重要的话,a re-used statement每个方法在调用时都会打印自己的名字.它会通过一些变体来实现puts __method__.)

ruby methods module metaprogramming

37
推荐指数
2
解决办法
2万
查看次数

如何修改Ruby gem

如何修改现有的*.gem文件?我想修改gem中的Rakefile,以便它能够在Windows上编译.

ruby gem

37
推荐指数
5
解决办法
3万
查看次数

更改.each循环中引用的数组元素的值?

如何实现以下目标:我想更改.each循环中管道字符之间引用的数组元素的值.

这是我想要做的一个例子,但目前没有工作:

x = %w(hello there world)
x.each { |element|
   if(element == "hello") {
       element = "hi" # change "hello" to "hi"
   }
}
puts x # output: [hi there world]
Run Code Online (Sandbox Code Playgroud)

很难找到如此普遍的东西.

ruby arrays

37
推荐指数
3
解决办法
6万
查看次数

使用Ruby MiniTest时套件之前/之后

RSpec before(:suite)after(:suite)MiniTest 有替代品吗?

我怀疑自定义测试运行器是有序的,但我无法想象这不是一个常见的要求,所以有人可能实现了.:-)

ruby test-suite minitest

37
推荐指数
4
解决办法
3万
查看次数

覆盖模块中另一个定义的方法

我想定义一个Date#next第二天返回的实例方法.所以我做了一个DateExtension模块,像这样:

module DateExtension
  def next(symb=:day)
    dt = DateTime.now
    {:day   => Date.new(dt.year, dt.month, dt.day + 1),
     :week  => Date.new(dt.year, dt.month, dt.day + 7),
     :month => Date.new(dt.year, dt.month + 1, dt.day),
     :year  => Date.new(dt.year + 1, dt.month, dt.day)}[symb]
  end
end
Run Code Online (Sandbox Code Playgroud)

使用它:

class Date
  include DateExtension
end
Run Code Online (Sandbox Code Playgroud)

调用该方法d.next(:week)会使Ruby抛出错误ArgumentError: wrong number of arguments (1 for 0).如何使用模块中声明的next方法覆盖Date类中的默认方法DateExtension

ruby methods module

37
推荐指数
2
解决办法
2万
查看次数

在rails 3中设置记录器

我正在试图弄清楚如何使用带有rails 3的记录器.我需要在控制台中记录一个没有它的文件,但我只是无法弄清楚如何设置它然后,如何写一些东西到那个日志.我试过rails docs,但他们并没有真正说清楚.

ruby logging ruby-on-rails ruby-on-rails-3

37
推荐指数
1
解决办法
2万
查看次数

Rails - 创建和创建!方法,RoR 3教程

所以我知道bang(感叹号)和非bang方法之间的区别通常是方法是修改对象本身还是返回一个单独的修改对象,保持原始不变.

然后在本书的第6章中构建User模型时,我遇到了这个User.create方法,它创建了一个新模型并将其保存到数据库中.在Michael Hartl的Ruby on Rails 3教程中,他写道,该User.create!方法"就像create方法一样工作......除非它在创建失败时引发ActiveRecord :: Record-Invalid异常".

我很困惑.是User.create!方法不是下面的Ruby"砰-公约"还是我完全失去了一些东西?如果他遵循惯例,User.create!如果它是一个类方法,如何修改self?

ruby ruby-on-rails-3 railstutorial.org

37
推荐指数
2
解决办法
3万
查看次数

安装不与Home Brew一起使用的Ruby gem

我安装的宝石sudo gem install ...无法执行(我得到了command not found).他们似乎安装在/usr/local/Cellar/Brew的安装目录中(同样,宝石/Library/Ruby/也不起作用).还有什么我需要做的才能使宝石可执行吗?我在Mac OS X 10.6上使用ZSH,在Brew中使用Ruby v1.8.

编辑:它似乎现在正在运作.我刚出去几个小时又回来再试一次.

ruby macos bash gem homebrew

37
推荐指数
5
解决办法
5万
查看次数