Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #2018 (closed defect: wontfix)

Opened 5 years ago

Last modified 3 years ago

[PATCH] rake appdoc fails on Windows systems

Reported by: ken.barker@gmail.com Assigned to: David
Priority: normal Milestone:
Component: Railties Version: 1.0.0
Severity: normal Keywords: rake, rdoc, appdoc, windows
Cc: maze@strahlungsfrei.de

Description

Out of the box, running rake appdoc yields (on Win2K Pro):

(in W:/depot_final)
rm -r doc/app
rdoc -o doc/app --line-numbers --inline-source --title 'Rails Application Documentation' -T 'html' doc/README_FOR_APP app/controllers/admin_controller.rb app/controllers/application.rb app/controllers/login_controller.rb app/controllers/store_controller.rb app/helpers/admin_helper.rb app/helpers/application_helper.rb app/helpers/login_helper.rb app/helpers/store_helper.rb app/models/cart.rb app/models/line_item.rb app/models/order.rb app/models/product.rb app/models/user.rb
rake aborted!
undefined method `exitstatus' for nil:NilClass

Just running the rdoc command with all of the options and the entire list of files fails, yeilding:

option requires an argument -- T
For help on options, try 'rdoc --help'

Adding rdoc.template = nil to the rake task removes the -T 'html' option that the rdoc command chokes on. The rdoc command can run now without this option, but it will only work on the README_FOR_APP or the files matching app/**/*.rb, but not both. The rake appdoc call still yields the original `exitstatus' for nil:nilClass error.

Email sent to Jim (Rake) and Dave (RDoc) to see if they have any wisdom to apply to the problem.

Attachments

rake-appdoc.diff (0.9 kB) - added by anonymous on 12/20/05 22:40:39.
patch to trunk appdoc rake task to fix this problem
rdoc.bat (81 bytes) - added by anonymous on 01/12/06 13:37:06.

Change History

08/26/05 05:03:36 changed by maze@strahlungsfrei.de

  • cc set to maze@strahlungsfrei.de.

Same problem here (on WinNT).

08/27/05 08:03:37 changed by pfc.pille@gmx.net

I can second that. I was not able to build a RDoc for my app so far. I am using WinXP SP2

09/10/05 22:52:26 changed by Luis Lavena

What I noticed is when trying do the same on WinXP Pro (SP2), report me the folling:

D:\Programming\Sources\rails_app\mygemrails>rake appdoc
(in D:/Programming/Sources/rails_app/mygemrails)
rm -r doc/app
rdoc -o doc/app --line-numbers --inline-source --title 'Rails Application Documentation' doc/README_FOR_APP app/controllers/application.rb app/controllers/todo_controller.rb app/helpers/application_helper.rb app/helpers/todo_helper.rb app/models/todo.rb
rake aborted!
undefined method `exitstatus' for nil:NilClass

running manually that command line (rdoc ...) works fine, even adding the -T 'html' to it, build all the docs for my app.

The suggestion of put rdoc.template = nil don't look as a valid solution.

This keep me failing for creating a gem of my app...

Any suggestion?

09/11/05 14:40:06 changed by Luis Lavena

Update:copy&paste; the commandline of RDoc build the documentation property, so must be a rake/shell issue.

09/19/05 12:33:50 changed by Tristan

I third that. Same error for WinXP SP2 with latest gem betas.

10/03/05 03:33:07 changed by anonymous

Same problem here, also WinXP SP2.

10/04/05 10:50:30 changed by anonymous

Copy&Paste did not work for me. rake appdoc showed a command-line containint "-T 'HTML'" which I needed to change to "-- T 'HTML'" for rake appdoc to work properly.

10/11/05 01:20:04 changed by Luis Lavena

From "this post":http://wrath.rubyonrails.org/pipermail/rails/2005-January/001476.html

a few changes to rdoctask are needed.

Don't know if these changes will past test on *nix or ther OS than Windows.

Anyone a update on this?

10/21/05 14:05:01 changed by s@juretta.com

Hi,

just replace:

Rake::RDocTask.new("appdoc") { |rdoc|
  rdoc.rdoc_dir = 'doc/app'
  rdoc.title    = "Rails Application Documentation"
  rdoc.options << '--line-numbers --inline-source'
  rdoc.rdoc_files.include('doc/README_FOR_APP')
  rdoc.rdoc_files.include('app/**/*.rb')
}

with:

task "appdoc" do
   require 'rdoc/rdoc'
   rdoc = RDoc::RDoc.new
   options = Array.new
   #options << '-a'   # parses all methods (include protected, private)
   #options << '-cUTF-8' # you may want to set the charset
   options << '-odoc/app'
   options << '--line-numbers'
   options << '--inline-source'
   options << '-Thtml'
   options << 'doc/README_FOR_APP'
   Dir.glob('app/**/*.rb').each do |file|
    options << file
   end
   rdoc.document(options)    
end

it's just a hack but it works...

11/17/05 05:06:44 changed by Sky

I'm a newbie and have no clue where to modify these files?

11/17/05 05:47:15 changed by Sky

OK, I got it: ruby\lib\ruby\gems\1.8\gems\rails-0.14.3\lib\tasks\documentation.rake

It works now! Thanks a lot. Hope this bug be closed soon.

11/25/05 23:11:52 changed by agehret

Great! s@juretta.com's hack worked for me,too (WinXP SP2). Thanks a lot!

12/20/05 22:40:09 changed by rick@rickbradley.com

  • version changed from 0.13.1 to 1.0.0.
  • summary changed from rake appdoc fails on Windows systems to [PATCH] rake appdoc fails on Windows systems.

Confirmed (again) here -- in 1.0.0.

We went down the rabbit-hole for a while on this one trying various tactics to get a clean solution. There are a number of threads related to RDoc + Rake around the rubysphere (including some iffyness in rdoc.bat itself, where %1 %2 %3 ... gets in the way of unobtrusive fixes which involve rdoc.bat, where %* would help but may not be available on all Windows flavors). That as may be, the method above is the cleanest approach.

Attached is a patch against trunk which is just a condensation of the patch above by s@juretta.com. We've found this to work in our local lib/tasks/ directory as well (so long as we use 'redefine_task', -- we use a version written by Blair Zajac @ http://rubyforge.org/pipermail/rake-devel/2005-October/000173.html).

It would be nice to finally kill this ticket by mainlining a patch.

12/20/05 22:40:39 changed by anonymous

  • attachment rake-appdoc.diff added.

patch to trunk appdoc rake task to fix this problem

12/21/05 16:20:23 changed by Luis Lavena

Rick, was checking your post @ mailinglist.

Your patch works excelent, I have compiled, based on other rake post a fix until it gets officially accepted (hope soon!).

(local) lib/rake_redefine_fix.rb

# Rake allows the same task name to be specified multiple times, where
# each successive task definition appends to a list of actions to
# perform.  Therefore, an application specific task cannot redefine a
# previously defined task.  These methods here allow tasks to be
# redefined and renamed.

module Rake
   class Task

     # Clear all existing actions for the given task and then set the
     # action for the task to the given block.
     def self.redefine_task(args, &block)
       task_name, deps = resolve_args(args)
       TASKS.delete(task_name.to_s)
       define_task(args, &block)
     end
   end
end

# Clear all existing actions for the given task and then set the
# action for the task to the given block.
def redefine_task(args, &block)
   Rake::Task.redefine_task(args, &block)
end

# Alias one task name to another task name.  This let's a following
# task rename the original task and still depend upon it.
def alias_task(new_name, old_name)
   Rake::Task::TASKS[new_name.to_s] = Rake::Task::TASKS.delete(old_name.to_s)
end

# To use this:
#This way, in a new lib/tasks/clone_structure_to_test.rake, I can use this:

# # Delete the original clone_structure_to_test task and create a new
# # one that uses the SQL DDL files to set up the database.
# desc "Faster replacement for the original :clone_structure_to_test"
# redefine_task :clone_structure_to_test => :environment do
#    abcs = ActiveRecord::Base.configurations
#    `psql --quiet -U "#{abcs["test"]["username"]}" -f db/create.sql 
# # {abcs["test"]["database"]}`
# end

(local) lib/tasks/documentation_fix.rake

# Delete the included rails 1.0.0 appdoc task to be replaced with this one
# It fix the appdoc error on Windows (based on mailinglist message)
# http://wrath.rubyonrails.org/pipermail/rails-core/2005-December/000412.html
# http://rubyforge.org/pipermail/rake-devel/2005-October/000173.html
#
require 'rake_redefine_fix'

desc "Generate documentation for the application (Fixed)"
redefine_task :appdoc do
  require 'rdoc/rdoc'
  opt = ['-odoc/app', '--line-numbers', '--inline-source', '-Thtml']
  ['doc/README_FOR_APP', 'app/**/*.rb'].each { |p| opt << Dir.glob(File.join(RAILS_ROOT, p)) }
  RDoc::RDoc.new.document(opt.flatten)
end

01/12/06 13:37:06 changed by anonymous

  • attachment rdoc.bat added.

08/02/06 13:13:37 changed by anonymous

gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda gongda

02/25/07 20:06:46 changed by josh

  • status changed from new to closed.
  • resolution set to wontfix.

"rake-appdoc.diff" won't fix the issue. On unix systems (including OS X), you get a "Don't know how to build task 'doc:app'" error message. I would suggest using one of the work arounds listed if you are on windows.