我将此代码放在我的 Rakefile 中,以便能够从附加文件夹“test/classes”(不仅仅是来自 test/models、test/controllers 等)运行测试:
# Adding test/classes directory to rake test.
namespace :test do # line 9
desc "Test tests/classes/* code"
Rails::TestTask.new(parsers: 'test:prepare') do |t| # line 11
t.pattern = 'test/classes/**/*_test.rb'
end
end
Rake::Task['test:run'].enhance ["test:classes"]
Run Code Online (Sandbox Code Playgroud)
当我运行rails test.
但是当我运行时rails db:migrate,我收到此错误:
NameError: uninitialized constant Rails::TestTask
/Users/Developer/project/Rakefile:11:in `block in <top (required)>'
/Users/Developer/project/Rakefile:9:in `<top (required)>'
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能摆脱错误,但仍然能够从
我有一些Rake任务,我想在我的Rakefiles中使用.是否可以在另一个rakefile中包含一个rakefile中定义的任务?
使用ruby文件(或任何rake工具),我需要确定执行我的脚本的用户是否能够执行某些Shell命令。尤其是g ++等。希望与系统无关,因此,如果存在某些g ++。bat,g ++。exe或只是g ++(等),则只要在用户系统上的路径和可执行文件上都应该说是。
示例:如果用户具有该文件的无扩展名可执行文件版本和该文件的.cmd版本,则对于Linux系统上的no扩展名版本,应该说“是”,而对于Windows上的.cmd版本则应说“是”。系统。由于用户外壳程序只能执行该版本的文件。
这样做的目的是允许脚本进行自我配置(尽可能多)。
关于如何执行此操作的任何建议?
我做一些常见的任务Rakefile,比如编译,链接等.
当编译失败时,ruby显示完全回溯,其中发生了任务错误,但它对我来说真的没用,甚至更多:这个回溯隐藏了编译错误.
$ rake
mkdir -p build
llvm-as source/repl.ll -o build/repl.bc
llvm-as: source/repl.ll:6:22: error: expected value token
call i32 @fputc(i8 'x', i32 0)
^
rake aborted!
Command failed with status (1): [llvm-as source/repl.ll -o build/repl.bc...]
/usr/local/lib/ruby/1.9.1/rake.rb:993:in `block in sh'
/usr/local/lib/ruby/1.9.1/rake.rb:1008:in `call'
/usr/local/lib/ruby/1.9.1/rake.rb:1008:in `sh'
/usr/local/lib/ruby/1.9.1/rake.rb:1092:in `sh'
...
Run Code Online (Sandbox Code Playgroud)
如何在"rake aborted"之后隐藏所有内容!?
我试图进行交互式Ruby测试无济于事.
我没有问题地下载了zip文件,并按照终端命令行的说明继续得到以下错误.我使用的是"Ruby 1.9.3p392(2013-02-22修订版39386)[x86_64-darwin10.8.0]".
如果有人可以提供任何帮助或建议,请提前感谢您.
INSTRUCTIONS:
Install RSpec
gem install rspec
Enter the course directory. (That's the same directory that this
index.html file is in.)
cd learn_ruby
Enter the 00_hello lab.
cd 00_hello
Open a terminal in this directory
cd 00_hello
This directory is the starting point for this exercise. It contains a
spec file and you'll be adding a ruby file to (eventually) make the
specs pass.
Run the test
rake
Watch it fail
You should see an error. Don't …Run Code Online (Sandbox Code Playgroud) 系统:Windows 10 使用:当前版本的 Ruby 我试图按照https://github.com/piedoom/tumbot上的说明运行 tumbot
然而,尽管安装了该捆绑包,它还是拒绝迁移。我得到的错误是 https://66.media.tumblr.com/029bbd52eda91c2ffbac01f7c8af467d/27d62997ece87db2-48/s540x810/4c5b63b9acfbd7495342cb667fc8c78236964d60.png
C:\Users\QueenBee>rake migrate
rake aborted!
NoMethodError: undefined method `migrate' for ActiveRecord::Migrator:Class
C:/Users/QueenBee/Rakefile:9:in `block in <top (required)>'
Tasks: TOP => migrate
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)
里面的rake文件看起来像这样 https://66.media.tumblr.com/1b6f54503a7b2c5d91c43ae5a2801988/27d62997ece87db2-9c/s540x810/172efac954b66f4dc77980a3e2fdfda0b529be71
require 'active_record'
require 'yaml'
require 'logger'
task :default => :migrate
desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x"
task :migrate => :environment do
ActiveRecord::Migrator.migrate('db/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil )
end
task :environment do
ActiveRecord::Base.establish_connection(YAML::load(File.open('config/database.yml')))
ActiveRecord::Base.logger = …Run Code Online (Sandbox Code Playgroud) ruby rake文件中<echo> ant任务的等效性是什么?
我一直在创建一个Rakefile.方向说创建一个Rakefile文件,可以帮助您自动执行常见任务.它还说要投入:
require 'rake/testtask'
Rake::TestTask.new do |t|
t.libs << "tests"
t.test_files = FileList['tests/test*.rb']
t.verbose = true
end
Run Code Online (Sandbox Code Playgroud)
谢谢
我希望我的Ruby脚本在某个条件下返回任何非零退出状态.退出状态本身并不重要,只要它不为零即可.我测试了它是如何完成的:
test_exit.rb:
exit 4
Run Code Online (Sandbox Code Playgroud)
test_exit_wrap.rb:
system("ruby test_exit.rb")
puts $?.exitstatus
Run Code Online (Sandbox Code Playgroud)
CMD:
> ruby test_exit_wrap.rb
4
Run Code Online (Sandbox Code Playgroud)
这太棒了,因为它正是我想要的.然后我试着在我的项目中复制它.
pullrequest.rb:
results = [install_result.class, clicks_result.class, event_result.class, tuples_result.class, match_result.class]
if results.include? NilClass
puts "result included nil"
exit 4
end
Run Code Online (Sandbox Code Playgroud)
rakefile.rb:
command = "irb #{@script} #{@app_id} #{start_date} #{end_date} #{start_time} #{end_time} #{@timezone} #{@database}"
system("#{command}")
puts $?.exitstatus
if $?.exitstatus != 0
puts "!!!!!!!!!!!!!!!!!!!!!! FAILED JOB !!!!!!!!!!!!!!!!!!!!!!!!!!"
@backjob_queue << fail
end
Run Code Online (Sandbox Code Playgroud)
CMD:
pullkochava.rb(main):032:1>
result included nil
=> nil
pullrequest.rb(main):032:0>
0
Run Code Online (Sandbox Code Playgroud)
(当然,剪掉这些,希望它仍然有意义;同样@script等于pullrequest.rb,我已经双重检查了)我们可以看到if results.include?块肯定会被执行,但是出口4似乎丢失了.0来自puts $ ?. exitstatus,我永远不会让它返回任何东西而不是0.我已经尝试过引发错误,不同的退出代码和中止.Abort确实返回非零退出代码; 然而它也中止了耙子.它将放置FAILED JOB,但是rakefile无法将@backjob_queue保存到我的数据库中.
我错过了什么吗?如何返回不会中止rake的非零退出状态?
在此 Rakefile 中,我想将默认任务设置为 :test。
task :default => :test
Run Code Online (Sandbox Code Playgroud)
Rubocop 现在已经进入现场并声明
Style/HashSyntax: Use the new Ruby 1.9 hash syntax.
Run Code Online (Sandbox Code Playgroud)
伟大的。我没有太多 Ruby 背景,但我确实知道通用哈希语法旨在分配值并方便以后获取它们。
老实说,我不知道如何传达这一点,你有一些任务并且有一个“神奇”的默认实例,我想分配:test
我尝试了一些排列,但似乎都不起作用。我显然不是来自同一个星球。
我有一个模型,我们称之为Foobar.我希望能够运行一个cron作业来更新作为Foobar实例的所有对象的属性.所以,在伪代码中,它可能是这样的:
Foobar.all.each do |foobar|
foobar.update_attributes({:my_attribute => 'updated'});
end
Run Code Online (Sandbox Code Playgroud)
现在,假设我将其包装在名为Foobar.run_update()的类方法中.
调用Foobar.run_update()可以从控制器,甚至从视图中正常工作.但是,我想要做的是从Rakefile运行run_update(),以便我可以将它绑定到cron运行.但是,当从Crontab调用Rake时,Foobar类不可用.
我怎么解决这个问题?当从Cron调用Rake时,如何从Rake访问Foobars的类方法?
非常感谢您的帮助.
这是代码:
desc "Find 301 errors on production servers"
task :find301 do
command = "grep 'HTTP/1.1\" 301' /var/log/httpd/*ssl-access.log | grep -v 'gclid' | awk '{print \$7}' | sort | uniq -c | sort -nr"
production_servers.each do |server|
sh "ssh root@#{server} #{command}"
end
end
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来逃避shell命令,最好采用允许sh "ssh root@#{server} #{command}"与任意commands 一起使用的格式?
我在包含在Rake文件中使用的其他文件时遇到问题.例如,我有一个version.rb文件,其中包含我想在rake文件中引用的版本号,另外,我有一个gem规范,在.gemspec文件中指定,我也想在rake中使用文件.我无法确定引用这两个文件的正确路径.事实上,这是我遇到的问题最严重的红宝石问题(require语句/ LOAD_PATH),令人非常沮丧; 由于我不确定如何解决这些问题,这个问题变得更糟.我目前正在避免使用诸如bundler之类的包处理程序,因为我需要先了解基础知识.
请参阅我的代码编辑器的附图,其中显示了项目结构(标准宝石结构,对于名为Cart的宝石,这只是一个虚拟应用程序进行实验).

所以,我的rakefile.rb位于项目的根文件夹中.指定require时,指定的路径应该相对于何处?它是相对于您要求的文件还是相对于lib文件夹或其他任何文件?我正在运行rake -T,列出任务,这些是我看到的错误消息:
尝试从Rakefile.rb中要求version.rb文件:
require 'cart/version'
$ rake -T
rake aborted!
cannot load such file -- lib/cart/version
/Users/Sancho/dev/ruby/student/cart/Rakefile.rb:5:in `<top (required)>'
Run Code Online (Sandbox Code Playgroud)
require 'lib/cart/version'
$ rake -T
rake aborted!
cannot load such file -- lib/cart/version
/Users/Sancho/dev/ruby/student/cart/Rakefile.rb:5:in `<top (required)>'
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)
试图从Rakefile.rb中要求cart.gemspec:
require 'cart.gemspec'
$ rake -T
rake aborted!
cannot load such file -- cart.gemspec
/Users/Sancho/dev/ruby/student/cart/Rakefile.rb:6:in `<top (required)>'
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)
我使用的是Ruby 2.0.0版,rake版本0.9.6(OSX Mavericks附带的默认版本).
(PS,我的目的是购买像RubyGems这样的Ruby IDE,但同样,我暂时没有这样做,因为我想首先学习基础知识,我不想依赖于IDE来解决我的问题.我不明白如何从第一原则修复它们.
谢谢.