Stack Level Too Deep Error (can't seem to figure it out)

Hi all,

I am running into a weird issue where my application is giving me a stack level too deep error. I can't seem to find where my code is throwing this error. On the machine I developed this code on, this error does not show up when I run rails s but when I move the code to another system to run it this error shows up.

The system that this code runs fine on is a mac os x machine running lion with rvm (ruby 1.9.2), rails 3.0.10.

The system that is giving me this error it is a ubuntu 10.11 using passenger 3.0.11, apache2, rvm (ruby 1.9.2) and rails 3.0.10.

When I create a vanilla rails app on the ubuntu system, this error does not show.

When I hit my application from the web, no matter which view I hit I get the following error:

Showing /home/rails30/apps/vell/app/views/homes/index.html.erb where line # raised:

stack level too deep

Extracted source (around line #):

Rails.root: /home/rails30/apps/vell Application Trace | Framework Trace | Full Trace

activesupport (3.0.10) lib/active_support/core_ext/class/attribute.rb: 81

the development log shows:

Completed 500 Internal Server Error in 282ms

ActionView::Template::Error (stack level too deep):

Rendered /home/vmcilwain/.rvm/gems/ruby-1.9.2-p290/gems/ actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/ _trace.erb (1.9ms) Rendered /home/vmcilwain/.rvm/gems/ruby-1.9.2-p290/gems/ actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/ _request_and_response.erb (93.8ms) Rendered /home/vmcilwain/.rvm/gems/ruby-1.9.2-p290/gems/ actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/ template_error.erb within rescues/layout (107.0ms)

Anyone have any ideas on how I can figure out what is causing this error? I have tried poking around but Im afraid I just can't seem to find it.

I don't have a specific solution, but you could try using the Gemfile from the failing app with your vanilla app so that the same gems are used. If that breaks the vanilla app then you can find the gem that causes the problem.

Colin

Hi Vell, good to hear you've got your site working! The error you are getting is caused by Rails getting stuck in an endless loop with the resulting stack overflow. You are probably redirecting from your page to your controller which is redirecting to the same page which is redirecting to the controller .... redirect apparently doesn't always do what it says (i.e. redirect the browser), sometimes it just redirects within the controller (if I remember correctly - I had a similar problem a few weeks ago).

-----Oprindelig meddelelse-----

Hi Vell, good to hear you've got your site working! The error you are getting is caused by Rails getting stuck in an endless loop with the resulting stack overflow. You are probably redirecting from your page to your controller which is redirecting to the same page which is redirecting to the controller .... redirect apparently doesn't always do what it says (i.e. redirect the browser), sometimes it just redirects within the controller (if I remember correctly - I had a similar problem a few weeks ago).

Would you not expect to see a vaild line number in the error message and a much longer stack trace in that case?

Colin

I honestly don't know - I got the same error a few weeks ago when trying to correct an old Rails site, catching a few undefined objects and sending the user an appropriate response. I tracked the problem down to a redirect in a controller where the redirect was sending the application into a loop - when I removed it and tackled the undefined object problems in the views (which was much more cumbersome) the stack overflow error went away!

-----Oprindelig meddelelse-----

Brynjolfur,

All of my research leads me to believe that the problem is with an endless loop somewhere. The problem that I have with this scenario is that I am not getting this problem on my development system. Its only happing on this ubuntu system that I have just set up.

If I run `rails s` on my development system my application works correctly. No errors of any type. But when I move the application to this ubuntu system, and use `rails s` I get this error. That in itself is whats got me scratching my head. Could it be their is a permissions problem somewhere that is causing this error?

Thats really the problem I am having is that I don't have a large stack trace and nothing to point me in the general area of the issue. As it stands right now, The only re-direct I am doing is in my routes folder where I am doing the initial `root :to =>` but when I remove that or even go to any controller method directly, this error shows up. Again that is what confuses me, Its not one controller method but ALL controller methods that throws this error.

Colin,

Because I am using the same gems on both systems I would think that it wouldn't be a gem problem. I would have thought having the gem file would make it so that I have exactly the same gems no matter what system I am on. However, I will move the gem file to the vanilla app just to see what happens. I would be very curious to see if the problem shows up there.

I just moved the Gemfile to the vanilla app and ran bundle install. Fired up the application using `rails s` and the application came up fine. I even created a new scaffold to test that I can hit a controller and that seems to be working fine as well.

So I guess it has to be my code. I guess I will have to keep poking around to see where I can find it but its like doing it with a blindfold on.

I just moved the Gemfile to the vanilla app and ran bundle install. Fired up the application using `rails s` and the application came up fine. I even created a new scaffold to test that I can hit a controller and that seems to be working fine as well.

So I guess it has to be my code. I guess I will have to keep poking around to see where I can find it but its like doing it with a blindfold on.

What happens if you copy the config folder from the failing one onto the vanilla one I wonder. Start a temporary local git repository for the vanilla app so you can easily get back to a working one once you get it to fail.

Colin

I presume that you did copy gemfile.lock to the second machine and did bundle install there.

By the way, it makes it easier to follow the thread if you do not top post. Insert your reply at appropriate points in the previous message. Thanks.

Colin

> I just moved the Gemfile to the vanilla app and ran bundle install. > Fired up the application using `rails s` and the application came up > fine. I even created a new scaffold to test that I can hit a > controller and that seems to be working fine as well.

> So I guess it has to be my code. I guess I will have to keep poking > around to see where I can find it but its like doing it with a > blindfold on.

What happens if you copy the config folder from the failing one onto the vanilla one I wonder. Start a temporary local git repository for the vanilla app so you can easily get back to a working one once you get it to fail.

Colin

Good idea. I created my git repository and moved my config file over. I changed the name at the top of the config file so I wouldn't get an unknown constant error and commented out the "root :to =>" line since it didnt exist in the application. Aside from that the application worked fine with no issues.

That surprises me a little. Keep moving other stuff over I suppose, eventually you will either have it all working or you will find the problem.

Could it be to do with the path to the app? Unusual characters or folder name?

Did you re-compile the assets after you moved it bundle exec rake assets:precompile

Colin

> I just moved the Gemfile to the vanilla app and ran bundle install. > Fired up the application using `rails s` and the application came up > fine. I even created a new scaffold to test that I can hit a > controller and that seems to be working fine as well.

I presume that you did copy gemfile.lock to the second machine and did bundle install there.

I didn't think I needed to copy the gemfile.lock to the mac os x machine since they are both the same file. As for the vanilla app, I only copied the gemfile not the gemfile.lock.

>> > I just moved the Gemfile to the vanilla app and ran bundle install. >> > Fired up the application using `rails s` and the application came up >> > fine. I even created a new scaffold to test that I can hit a >> > controller and that seems to be working fine as well.

>> > So I guess it has to be my code. I guess I will have to keep poking >> > around to see where I can find it but its like doing it with a >> > blindfold on.

>> What happens if you copy the config folder from the failing one onto >> the vanilla one I wonder. Start a temporary local git repository for >> the vanilla app so you can easily get back to a working one once you >> get it to fail.

>> Colin

> Good idea. I created my git repository and moved my config file over. > I changed the name at the top of the config file so I wouldn't get an > unknown constant error and commented out the "root :to =>" line since > it didnt exist in the application. Aside from that the application > worked fine with no issues.

That surprises me a little. Keep moving other stuff over I suppose, eventually you will either have it all working or you will find the problem.

Could it be to do with the path to the app? Unusual characters or folder name?

The path to the app is about a simple as it gets. Even the app name itself is simple. Just one word with no underscores or special characters. Aside from the symlink in /var/www that apache2 uses to get to the app everything else is pretty direct.

Did you re-compile the assets after you moved it bundle exec rake assets:precompile

I did not re-compile assets, I wasn't aware that I needed to do such a thing when moving an app. I am very new to rails 3 and have mostly done my development in rails 2. I will certainly give that a shot and see if that is the source of my issue.

>> > I just moved the Gemfile to the vanilla app and ran bundle install. >> > Fired up the application using `rails s` and the application came up >> > fine. I even created a new scaffold to test that I can hit a >> > controller and that seems to be working fine as well.

>> > So I guess it has to be my code. I guess I will have to keep poking >> > around to see where I can find it but its like doing it with a >> > blindfold on.

>> What happens if you copy the config folder from the failing one onto >> the vanilla one I wonder. Start a temporary local git repository for >> the vanilla app so you can easily get back to a working one once you >> get it to fail.

>> Colin

> Good idea. I created my git repository and moved my config file over. > I changed the name at the top of the config file so I wouldn't get an > unknown constant error and commented out the "root :to =>" line since > it didnt exist in the application. Aside from that the application > worked fine with no issues.

That surprises me a little. Keep moving other stuff over I suppose, eventually you will either have it all working or you will find the problem.

Could it be to do with the path to the app? Unusual characters or folder name?

Did you re-compile the assets after you moved it bundle exec rake assets:precompile

My attempt to run bundle exec rake assets:precompile gave me an error:

rails30@fangorn:~/apps/vell$ bundle exec rake assets:precompile rake aborted! Don't know how to build task 'assets:precompile'

(See full trace by running task with --trace)

Sorry, I don't think that was introduced till rails 3.1. So no need to do that.

Colin

> I just moved the Gemfile to the vanilla app and ran bundle install. > Fired up the application using `rails s` and the application came up > fine. I even created a new scaffold to test that I can hit a > controller and that seems to be working fine as well.

I presume that you did copy gemfile.lock to the second machine and did bundle install there.

I didn't think I needed to copy the gemfile.lock to the mac os x machine since they are both the same file. As for the vanilla app, I only copied the gemfile not the gemfile.lock.

It is gemfile.lock that defines which gems and which versions to use for the app. When you move an app you should move the lock file with it and run bundle install. That will make sure the same gem versions are used as were used previously. If you don't do that then it may end up using different versions of the gems.

Copy gemfile.lock from the working machine and run bundle install again.

For more info on this have a look at http://gembundler.com/man/bundle-install.1.html which has a good description of how it all works. Well reasonably good, I have just posted a question here as there is (at least) one aspect I realise that I do not understand :slight_smile:

Colin

>> > I just moved the Gemfile to the vanilla app and ran bundle install. >> > Fired up the application using `rails s` and the application came up >> > fine. I even created a new scaffold to test that I can hit a >> > controller and that seems to be working fine as well.

>> I presume that you did copy gemfile.lock to the second machine and did >> bundle install there.

> I didn't think I needed to copy the gemfile.lock to the mac os x > machine since they are both the same file. As for the vanilla app, I > only copied the gemfile not the gemfile.lock.

It is gemfile.lock that defines which gems and which versions to use for the app. When you move an app you should move the lock file with it and run bundle install. That will make sure the same gem versions are used as were used previously. If you don't do that then it may end up using different versions of the gems.

When I moved the application from one system to the other, I moved the entire application folder so that copied the gem.lock file as well as everything else that was on my development system. It was a folder copy from one system to the other.

Copy gemfile.lock from the working machine and run bundle install again.

I have copied the gemfile.lock to the vanilla app and re ran bundle install again and the app still works without issue. I am now working on moving the migration files over then the models and controllers to see if that breaks.

Did you run bundle install after copying it? If not, try that. That will make sure all the right gems are available.

Colin

> When I moved the application from one system to the other, I moved the > entire application folder so that copied the gem.lock file as well as > everything else that was on my development system. It was a folder > copy from one system to the other.

Did you run bundle install after copying it? If not, try that. That will make sure all the right gems are available.

Yes I did run bundle right after moving the application over. My steps for the copy were as follows:

zipped the application on my mac scp'd the zip file to the ubuntu system unzipped the file in my ~/apps corrected the permissions (used a vanilla app to see what the permissions were) ran bundle ran rails -s connected to localhost:3000 app reports stack too deep error

On my mac, just running rails -s on the app and it comes up without any issue.

> When I moved the application from one system to the other, I moved the > entire application folder so that copied the gem.lock file as well as > everything else that was on my development system. It was a folder > copy from one system to the other.

Did you run bundle install after copying it? If not, try that. That will make sure all the right gems are available.

Yes I did run bundle right after moving the application over. My steps for the copy were as follows:

zipped the application on my mac scp'd the zip file to the ubuntu system unzipped the file in my ~/apps corrected the permissions (used a vanilla app to see what the permissions were) ran bundle

I presume you mean bundle install here.

ran rails -s connected to localhost:3000 app reports stack too deep error

On my mac, just running rails -s on the app and it comes up without any issue.

I am out of ideas then I think. Back to replacing the vanilla app a bit at a time until it fails. As a side issue it would really have been better to clone the git repo on the new machine rather than copying the whole lot. I wonder whether you have something in tmp/cache or somewhere else that is confusing it on the new system. If you end up copying everything over to the vanilla app and it then works then it must be something like that.

Colin