uninitialized constant ApplicationController::CanCan (NameError) in production - ruby-on-rails-3

I've using nginx + unicorn at production
And I've got following error at log/unicorn.log but it's work fine at localhost (in both environments development and production)
I, [2012-07-01T19:20:39.905978 #15422] INFO -- : Refreshing Gem list
E, [2012-07-01T19:20:40.526582 #15418] ERROR -- : uninitialized constant ApplicationController::CanCan (NameError)
for line
rescue_from CanCan::AccessDenied do |exception|
I have gem 'cancan' in Gemfile (below gem 'rails'). Cancan gem is installed. I've tried both versions 1.6.7 and 1.6.8
current$ bundle exec gem list cancan
*** LOCAL GEMS ***
cancan (1.6.7)
current$ bundle exec rails -v
Rails 3.2.3
current$ ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux]
current$ bundle exec rails c production
Loading production environment (Rails 3.2.3)
1.9.3p125 :001 > CanCan
=> CanCan
1.9.3p125 :002 >
What can be wrong with my configuration?
upd:
require 'cancan' in application_controller cause error No such file to load -- cancan (LoadError)
My Gemfile

I think unicorn doesn't load new gems on restart.
/etc/init.d/unicorn_<project_name> stop
/etc/init.d/unicorn_<project_name> start
Fix the problem

Related

rails -v shows wrong version when using rvm

I've just tried to update to Rails 3.1.3 using RVM with the following commands:
rvm install ruby-1.9.3-p0
rvm --default use ruby-1.9.3-p0
If I query the current version or ruby:
ruby -v
I get the correct version: ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin10.8.0]
Then to update the gems:
gem update --system
This gives me version 1.8.24
I then create my gemset and set it as my default:
rvm ruby-1.9.3-p0#rails313 --create --default
and finally install the Rails gem:
gem install rails
When I query the version of rails:
rails -v
I get Rails 3.0.11 ... my old version of Rails
If I try to start my Rails server
rails s
I get a huge error:
.rvm/gems/ruby-1.9.3-p0#rails313/gems/activesupport-3.0.11/lib/active_support dependencies.rb:239:in `require': dlopen(/Users/lss_dev/.rvm/gems/ruby-1.9.3-p0#rails313/gems/ruby-debug-base19-0.11.25/lib/ruby_debug.bundle, 9): Symbol not found: _ruby_current_thread (LoadError)
With a lot of complaints about dependencies.
My gemfile.lock does contain the following block:
rails (3.0.11)
actionmailer (= 3.0.11)
actionpack (= 3.0.11)
activerecord (= 3.0.11)
activeresource (= 3.0.11)
activesupport (= 3.0.11)
bundler (~> 1.0)
railties (= 3.0.11)
Does this have something to do with it or should I even be touching the gemfile.lock file??
I'm using rvm version 1.10.0, any help would be appreciated
To answer my own (extended) question...
Trashing the gemfile.lock file allowed me to just run
bundle install
ensuring that I had my Rails gem set to the correct version (3.1.3), which worked. The issue that I was running into then was when I started my rails server I got the following browser error
undefined method `consider_all_requests_local' for ActionController::Base:Class
Initially I thought this was due to some routing changes in Rails 3.1.* As it turned out in my application_controller.rb file I was dealing with 404 errors and had the following block:
unless ActionController::Base.consider_all_requests_local
rescue_from Exception, :with => :render_404
end
ActionController::Base.consider_all_requests_local
Is now deprecated and substituting in:
Rails.application.config.consider_all_requests_local
Did the trick.
Thank you for your help and I hope this helps someone in the future
You may have to swap the version of rvm / ruby and then install.
This may be of use: https://rvm.io/gemsets/basics/

annotate cannot find rake executable

I'm using ctran/annotate_models to annotate my models and route files. I'm now getting an error:
$ annotate -r
$ROOT/usr/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/shared_helpers.rb:151:in `block in cripple_rubygems': can't find executable rake (Gem::Exception)
from $ROOT/usr/lib/ruby/gems/1.9.1/bin/rake:19:in `<main>'
Route file annotated.
...with the result that annotate adds the comment block to config/routes.db, but the comment is empty. The message suggests that annotate can't find rake, but rake is certainly there:
$ which rake
$ROOT/usr/bin/rake
and here's what rake says about the current configuration:
$ rake about
About your application's environment
Ruby version 1.9.2 (x86_64-darwin10.6.0)
RubyGems version 1.3.7
Rack version 1.2
Rails version 3.0.5
Active Record version 3.0.5
Action Pack version 3.0.5
Active Resource version 3.0.5
Action Mailer version 3.0.5
Active Support version 3.0.5
Application root .../myapp
Environment development
The only things that's slightly odd in my Gemfile is that I am specifying a previous version of rake:
# file: Gemfile
source 'http://rubygems.org'
gem 'rails', '3.0.5'
gem 'rake', '0.8.7' # workaround "uninitialized constant Rake::DSL" bug
...
gem 'annotate', '2.4.0'
Any ideas of what's wrong?
Try using bundle exec rake instead.

bundle install and rbx-require-relative

After following railstutorial.orgI am trying to run bundle install. It list use of gem like :
Using railties (3.0.7)
Using rails (3.0.7)
Using sass (3.1.3)
And this error :
Installing rbx-require-relative (0.0.5) /home/canard/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:364:in `ensure_required_ruby_version_met': rbx-require-relative requires Ruby version ~> 1.8.7. (Gem::InstallError)
from /home/canard/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:135:in `install'
...
I understand ruby 1.9.2 needs rbx-require-relative, but why it doesn't want to install it. It demand ruby ruby 1.8.7. I am little lost.
Further more after this error it stop, and my gem in my Gemfile are never read or installed...
I'm using ruby 1.9.2p180 and rails 3.0.7
Thanks for your help
rbx-require-relative is a port of Ruby 1.9’s relative_relative for Rubinus and MRI 1.8
If you're running ruby1.9 then you don't need it. Remove it from your Gemfile.
Don't require ruby-debug in your Gemfile as it has rbx-require-relative as a dependency.
Add gem 'ruby-debug19' instead
You might try to install the the ruby-debug19 gem for ruby 1.9.2.
Here is the gem info:
http://rubygems.org/gems/ruby-debug19
Here is the bundler line:
gem 'ruby-debug19'
Replacing
gem 'ruby-debug'
with
gem 'ruby-debug', :platforms => :ruby_18
gem 'ruby-debug19', :platforms => :ruby_19
in my Gemfile solved this problem for me, working on both Ruby 1.8 and 1.9.

uninitialized constant Compass in rails 3 app

I was trying to use fancy-buttons gem in my rails 3 app but now I can not even start my local server because of this error:
$:~/rails/project$ rails server
/usr/lib/ruby/gems/1.8/gems/fancy-buttons-1.0.6/lib/fancy-buttons.rb:1: uninitialized constant Compass
(NameError)
This is what my gemfile looks like:
gem "fancy-buttons"
gem 'haml'
gem 'haml-rails'
gem 'compass', ">= 0.10.6"
I've ran bundle update and bundle install
Using haml (3.0.25)
Using compass (0.10.6)
Using fancy-buttons (1.0.6)
How can I fix this?
Compass needs to come before fancy-buttons in your gemfile. This ensures that it is loaded before fancy-buttons tries to require it as the gems in your gemfile are loaded in order.

Undefined method 'task' using Rake 0.9.0

I just updated Rake to the latest version (0.9.0.beta.4) and the rake command ends up with the following error message:
rake aborted!
undefined method `task' for #<Anelis::Application:0x9223b6c>
Here is the trace:
undefined method `task' for #<Anelis::Application:0x97ef80c>
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:214:in `initialize_tasks'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:139:in `load_tasks'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:77:in `method_missing'
/home/amokrane/Documents/prog/web/learning_rails/anelis/Rakefile:7:in `load_string'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:28:in `eval'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:28:in `load_string'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:16:in `load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:495:in `raw_load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:78:in `block in load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:129:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:77:in `load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:61:in `block in run'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:129:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:59:in `run'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/bin/rake:31:in `<top (required)>'
/usr/local/rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `load'
/usr/local/rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `<main>'
Anyone experienced the same issue? What could possibly be wrong? Note that I am running Rails 3.0.3, you may also be interested in the content of my Gemfile:
source 'http://rubygems.org'
gem 'rails', '3.0.3'
gem 'sqlite3-ruby', :require => 'sqlite3'
gem 'mysql2'
gem 'legacy_data'
gem 'resources_controller', :git => 'git://github.com/ianwhite/resources_controller'
gem 'will_paginate', '3.0.pre' # pagination
gem 'jquery-rails', '>= 0.2.6'
gem "rmagick" # sudo aptitude install libmagick9-dev
gem "paperclip", "~> 2.3"
gem "nested_form", :git => "git://github.com/madebydna/nested_form.git"
gem "meta_search"
gem "hirb"
gem "devise"
gem "rails_admin", :git => "git://github.com/sferik/rails_admin.git"
How can I fix this problem?
As explained in mordaroso's answer, there is a problem in Rake 0.9.0. You need to temporarily downgrade Rake in order to avoid it:
run: gem uninstall rake -v 0.9 (add sudo unless you use rvm)
add to your Gemfile: gem 'rake', '~> 0.8.7'
and then run: bundle update
You can skip the first step, but then you have to run rake using bundle exec, for example:
bundle exec rake db:migrate
Otherwise you get the following error.
rake aborted!
You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
Update
As Alex Chaffee noticed in a comment for Pablo Cantero's answer, that you might need to do the following to uninstall Rake if you still see the problem
rvm use #global && gem uninstall rake -v 0.9.0
rvm use # && gem uninstall rake -v 0.9.0
Also try the solution suggested in Duke's answer.
I had the same exception when running the 0.9.0.beta.4 version of Rake.
It looks like the new Rake::DSL is not loaded properly.
So I added following code to my Rakefile:
require 'rake'
# Rake Fix Code start
# NOTE: change 'Anelis' to your app's module name (see config/application.rb)
module ::Anelis
class Application
include Rake::DSL
end
end
module ::RakeFileUtils
extend Rake::FileUtilsExt
end
# Rake Fix Code end
MyApp::Application.load_tasks
That way I was able to run my Rake tasks again.
I know that this is not a elegant solution. But if you have to use the --pre version of Rake it might be all right to use this quick hack.
Note: This was just fixed in Rails 3.0.8
The new version of Rake does not put its DSL commands (task, file, desc, import, etc.) in the root of the Object namespace anymore (placing them in Object meant every object has a task command, not very nice. The DSL commands are available by mixing in the Rake::DSL module into any module needing the commands.
Until Ruby on Rails is updated to work with Rake 0.9.x, put the following in your project Rakefile after "require rake" and before the call to Application.load_tasks:
class Rails::Application
include Rake::DSL if defined?(Rake::DSL)
end
I've created an issue for rails_admin about this same error.
The answer:
This is a general Rails problem: http://twitter.com/dhh/status/71966528744071169
There should be a 3.0.8 release soon that fixes it. In the mean time, you can add the following line to your Gemfile:
gem 'rake', '~> 0.8.7'
It's a problem in Rake (0.9.0), it was announced by DHH on Twitter.
Rake 0.9, which was released yesterday, broke Rails (and others). While we wait for a fix, you'll want gem 'rake', '0.8.7' in your Gemfile.
This has been fixed in Ruby on Rails 3.0.8.rc1 which should be released in a few days time.
Rake 0.9.1 has just been released which reverses the change that caused this error but adds a deprecation warning: https://github.com/jimweirich/rake/commit/44aec3ceac085740bce0c385bccd65fc4d1d911c
I use rvm, but uninstalling doesn't help me. So I manually remove all 0.9 files from .rvm/gems/ruby#global directory and everything becomes as before!
without the need to uninstall Rake 0.9.x, add
gem 'rake', '~> 0.8.7'
to your Gemfile and just type
bundle exec rake -T