# Alias\_method\_chain stack level too deep in Rake test only

**URL:** <https://www.ruby-forum.com/t/alias-method-chain-stack-level-too-deep-in-rake-test-only/113424>\
**Category:** Rails\
**Created:** [August 30, 2007, 11:31pm UTC](https://www.ruby-forum.com/t/alias-method-chain-stack-level-too-deep-in-rake-test-only/113424 "2007-08-30T23:31:58Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![gcnovus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/779978/32.png) [@gcnovus](https://www.ruby-forum.com/u/gcnovus)\
**Post date:** [August 30, 2007, 11:31pm UTC](https://www.ruby-forum.com/t/alias-method-chain-stack-level-too-deep-in-rake-test-only/113424/1 "2007-08-30T23:31:58Z")

</div>

I have an odd error. I have the following module:

module ActionController  
module SslSupport

```
def self.included(base)
  raise "#{base} does not define url_for" unless

```

base.method\_defined?(:url\_for)  
unless base.respond\_to?(:url\_for\_without\_ssl\_supprt)  
base.send :include, InstanceMethods  
base.send :alias\_method\_chain, :url\_for, :ssl\_support  
end  
end

```
module InstanceMethods

  def url_for_with_ssl_support(options)
    new_options = options.dup

    if options.kind_of?(Hash)
      new_options.merge!({ :only_path => false }) if request.ssl?

```

^ url\_ssl?(new\_options)  
if url\_ssl?(new\_options)  
new\_options.merge!({ :protocol =\> ‘https’ })  
if [‘development’].include?(ENV[‘RAILS\_ENV’])  
new\_options.merge!({ :port =\> 3001, :host =\>  
request.host })  
end  
end  
new\_options.delete(:ssl)  
end

```
    url_for_without_ssl_support(new_options)
  end

  private

  def url_ssl?(options)
    case options
    when Hash
      protocol = options[:protocol] || 'http://'
      return options[:ssl] || protocol =~ /^https/
    when String
      return options =~ /^https/
    else
      return self.class.method_defined?(:request) ? request.ssl? :

```

false  
end  
end

```
end

```

end  
end

It is included in app/controllers/application.rb and in  
ActionView::Base. If I run

ruby test/functional/people\_controller\_test.rb or ruby test/functional/  
account\_controller\_test.rb, everything runs fine. If I run rake  
test:functionals, however, I get a “stack level too deep” within  
url\_for within those two test classes.

Example output:

test\_spec {The Account controller A guest (in general)} 001  
[should be able to view the sign-up page](The Account controller  
A guest (in general)):  
ActionView::TemplateError: stack level too deep  
On line #8 of app/views/account/start.rhtml

```
5: <h1>Create a free account in three steps:</h1>
6:
7: <ol>
8: <li>a.&nbsp;<%= link_to 'Choose', :action => 'choose' %></li>
9: <li>b.&nbsp;Create</li>
10: <li>c.&nbsp;Customize</li>
11: </ol>
lib/action_controller/ssl_support.rb:36:in `url_ssl?'
lib/action_controller/ssl_support.rb:19:in

```

`url_for_without_ssl_support' lib/action_controller/ssl_support.rb:28:in`url\_for’  
vendor/rails/actionpack/lib/action\_view/helpers/url\_helper.rb:  
70:in `send' vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb: 70:in`url\_for\_without\_ssl\_support’  
lib/action\_controller/ssl\_support.rb:28:in `url_for' vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb: 136:in`link\_to’

I figured that my self.included(base) would guard against this, but it  
doesn’t seem to work. Any thoughts?

-Gaius

---

<div class="post-metadata">

**Author:** ![gcnovus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/779978/32.png) [@gcnovus](https://www.ruby-forum.com/u/gcnovus)\
**Post date:** [August 30, 2007, 11:33pm UTC](https://www.ruby-forum.com/t/alias-method-chain-stack-level-too-deep-in-rake-test-only/113424/2 "2007-08-30T23:33:58Z")

</div>

I suppose I meant ‘method\_defined?’ instead of ‘respond\_to?’ but that  
doesn’t change the problem.

-Gaius
