problems with rails3.0.0.rc and haml?

Hi there,

I have a Rails application I developed using Rails 3.0.0.beta4. Up
until now no views were needed. My controllers just rendered text and
status (webservice).

Now i needed my first UI, i upgraded to rails 3.0.0.rc and i am for
the first time working with haml.

When i go to my first view, i get this very weird error:

wrong number of arguments (2 for 0)

The full trace:

activesupport (3.0.0.rc) lib/active_support/callbacks.rb:93:in `send'
activesupport (3.0.0.rc) lib/active_support/callbacks.rb:93:in
`run_callbacks'
actionpack (3.0.0.rc) lib/abstract_controller/callbacks.rb:17:in
`process_action'
actionpack (3.0.0.rc) lib/action_controller/metal/instrumentation.rb:
30:in `process_action'
activesupport (3.0.0.rc) lib/active_support/notifications.rb:52:in
`instrument'
activesupport (3.0.0.rc) lib/active_support/notifications/
instrumenter.rb:21:in `instrument'
activesupport (3.0.0.rc) lib/active_support/notifications.rb:52:in
`instrument'
actionpack (3.0.0.rc) lib/action_controller/metal/instrumentation.rb:
29:in `process_action'
actionpack (3.0.0.rc) lib/action_controller/metal/rescue.rb:17:in
`process_action'
actionpack (3.0.0.rc) lib/abstract_controller/base.rb:105:in `process'
actionpack (3.0.0.rc) lib/abstract_controller/rendering.rb:40:in
`process'
actionpack (3.0.0.rc) lib/action_controller/metal.rb:133:in `dispatch'
actionpack (3.0.0.rc) lib/action_controller/metal/rack_delegation.rb:
14:in `dispatch'
actionpack (3.0.0.rc) lib/action_controller/metal.rb:173:in `action'
actionpack (3.0.0.rc) lib/action_dispatch/routing/route_set.rb:62:in
`call'
actionpack (3.0.0.rc) lib/action_dispatch/routing/route_set.rb:62:in
`dispatch'
actionpack (3.0.0.rc) lib/action_dispatch/routing/route_set.rb:27:in
`call'
rack-mount (0.6.9) lib/rack/mount/route_set.rb:148:in `call'
rack-mount (0.6.9) lib/rack/mount/code_generation.rb:89:in `recognize'
rack-mount (0.6.9) lib/rack/mount/code_generation.rb:80:in
`optimized_each'
rack-mount (0.6.9) lib/rack/mount/code_generation.rb:88:in `recognize'
rack-mount (0.6.9) lib/rack/mount/route_set.rb:139:in `call'
actionpack (3.0.0.rc) lib/action_dispatch/routing/route_set.rb:489:in
`call'
haml (3.0.14) lib/sass/plugin/rack.rb:41:in `call'
actionpack (3.0.0.rc) lib/action_dispatch/middleware/head.rb:14:in
`call'
rack (1.2.1) lib/rack/methodoverride.rb:24:in `call'
actionpack (3.0.0.rc) lib/action_dispatch/middleware/params_parser.rb:
21:in `call'
actionpack (3.0.0.rc) lib/action_dispatch/middleware/flash.rb:177:in
`call'
actionpack (3.0.0.rc) lib/action_dispatch/middleware/session/
abstract_store.rb:149:in `call'
actionpack (3.0.0.rc) lib/action_dispatch/middleware/cookies.rb:268:in
`call'
activerecord (3.0.0.rc) lib/active_record/query_cache.rb:32:in `call'
activerecord (3.0.0.rc) lib/active_record/connection_adapters/abstract/
query_cache.rb:28:in `cache'
activerecord (3.0.0.rc) lib/active_record/query_cache.rb:12:in `cache'
activerecord (3.0.0.rc) lib/active_record/query_cache.rb:31:in `call'
actionpack (3.0.0.rc) lib/action_dispatch/middleware/callbacks.rb:
46:in `call'
activesupport (3.0.0.rc) lib/active_support/callbacks.rb:410:in
`_run_call_callbacks'
actionpack (3.0.0.rc) lib/action_dispatch/middleware/callbacks.rb:
44:in `call'
rack (1.2.1) lib/rack/sendfile.rb:107:in `call'
actionpack (3.0.0.rc) lib/action_dispatch/middleware/remote_ip.rb:
48:in `call'
actionpack (3.0.0.rc) lib/action_dispatch/middleware/
show_exceptions.rb:48:in `call'
railties (3.0.0.rc) lib/rails/rack/logger.rb:13:in `call'
rack (1.2.1) lib/rack/runtime.rb:17:in `call'
activesupport (3.0.0.rc) lib/active_support/cache/strategy/
local_cache.rb:72:in `call'
rack (1.2.1) lib/rack/lock.rb:11:in `call'
rack (1.2.1) lib/rack/lock.rb:11:in `synchronize'
rack (1.2.1) lib/rack/lock.rb:11:in `call'
actionpack (3.0.0.rc) lib/action_dispatch/middleware/static.rb:30:in
`call'
railties (3.0.0.rc) lib/rails/application.rb:168:in `call'
railties (3.0.0.rc) lib/rails/application.rb:77:in `send'
railties (3.0.0.rc) lib/rails/application.rb:77:in `method_missing'
railties (3.0.0.rc) lib/rails/rack/log_tailer.rb:15:in `call'
rack (1.2.1) lib/rack/content_length.rb:13:in `call'
rack (1.2.1) lib/rack/handler/webrick.rb:52:in `service'
/home/nva/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/webrick/
httpserver.rb:104:in `service'
/home/nva/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/webrick/
httpserver.rb:65:in `run'
/home/nva/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/webrick/server.rb:
173:in `start_thread'
/home/nva/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/webrick/server.rb:
162:in `start'
/home/nva/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/webrick/server.rb:
162:in `start_thread'
/home/nva/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/webrick/server.rb:
95:in `start'
/home/nva/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/webrick/server.rb:
92:in `each'
/home/nva/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/webrick/server.rb:
92:in `start'
/home/nva/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/webrick/server.rb:
23:in `start'
/home/nva/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/webrick/server.rb:
82:in `start'
rack (1.2.1) lib/rack/handler/webrick.rb:13:in `run'
rack (1.2.1) lib/rack/server.rb:213:in `start'
railties (3.0.0.rc) lib/rails/commands/server.rb:65:in `start'
railties (3.0.0.rc) lib/rails/commands.rb:30
railties (3.0.0.rc) lib/rails/commands.rb:27:in `tap'
railties (3.0.0.rc) lib/rails/commands.rb:27
script/rails:6:in `require'
script/rails:6

I have got no clue what this means or what i am doing wrong.
I have found a few things i need to change when going from beta4 to rc
but i still can't explain this.

It goes wrong in the callbacks, in the following function:

    def run_callbacks(kind, *args, &block)
      send("_run_#{kind}_callbacks", *args, &block)
    end

i have no idea why.

I hope someone can shed some light ...

When i go to my first view, i get this very weird error:

wrong number of arguments (2 for 0)

That means you're calling some function/method that's expecting no
arguments, and you're giving it two.

It goes wrong in the callbacks, in the following function:

def run_callbacks(kind, *args, &block)
send("_run_#{kind}_callbacks", *args, &block)
end

My guess would be that the callback is expecting no args, but is being
sent *args and &block. Even if it ignores them, it should probably
accept them. Try that and see if it works....

-Dave

Well, from the log as far as i could tell: it was no where in MY code,
but everything in rails code.
So it seemed there was no easy way for me to interfere easily.

But luckily, as is often the case, the problem/bug was a stupid
mistake.

My class is called EnvelopesController, and what did i want to do with
my envelopes? send them!
Alas, defining a such-named method will cause terrible havoc! :smiley:

Stupid-stupid-stupid :slight_smile:

That's the sort of thing that seems to strike Rails devs all the time.
Happened to me when I named something "options" IIRC. It seems
similar to someone's dictum on gun handling: there are shooters who
have had accidental discharges, and shooters who *will*. :slight_smile:

Perhaps there ought to be a gem/plugin/whatever that will warn you if
it detects reuse of a word that Rails uses....

-Dave