Using the the comma gem and exporting CSV files perfectly fine on my local environment. Also working on our staging environment which is running on an AWS instance.
ONLY failing on Heroku.
Heroku says:
2013-08-21T21:55:34.875724+00:00 app[web.1]: NoMethodError (undefined method `klass' for nil:NilClass):
2013-08-21T21:55:34.875724+00:00 app[web.1]: app/models/job.rb:220:in `block in <class:Job>'
2013-08-21T21:55:34.875724+00:00 app[web.1]: app/controllers/jobs_controller.rb:25:in `block (2 levels) in index'
2013-08-21T21:55:34.875724+00:00 app[web.1]: app/controllers/jobs_controller.rb:18:in `index'
And line 220 in my Job model is:
Comma do
...
customer :first_name
...
end
job.rb includes the line:
belongs_to :customer
And customer.rb has:
has_many :jobs
And as I mentioned this entire thing works great on my local box - I click the export button and out pops all the jobs, with each customer in the appropriate column.
For whatever reason it's only failing on Heroku.
I'm using Ruby 2.0.0-p0 on Heroku, Comma gem only verified up to 1.9.2 according to the documentation - BUT - I'm using Ruby 2.0.0-p0 on the staging server AND on my local environment and, again, it's working.
It's the 'klass" that's really throwing me off, because I don't have that anywhere in my code. I've read other threads about the same error and their solutions, but I don't have things like nested model forms and the like.
It is some issue with Heroku & Ruby 2.0 and associations? I've got the has_many and belongs_to on both sides, but still seems to be misunderstanding the association...
UPDATE
From the framework trace:
comma (3.1.0) lib/comma/extractors.rb:72:in `get_association_class' <====
comma (3.1.0) lib/comma/extractors.rb:55:in `block in method_missing'
comma (3.1.0) lib/comma/extractors.rb:48:in `each'
comma (3.1.0) lib/comma/extractors.rb:48:in `method_missing'
comma (3.1.0) lib/comma/extractors.rb:15:in `instance_eval'
comma (3.1.0) lib/comma/extractors.rb:15:in `results'
Your code may be the same on both local and prod, and it looks like you're using the same Rails/Ruby versions on local and production (good stuff!), but maybe your data isn't. Perhaps what's wrong is that in production you're retrieving a Job and navigating to some association, but that association doesn't exist, you're getting a nil, and kaboom?
It turned out that this was a legitimate bug in Comma gem - https://github.com/comma-csv/comma/releases
I reported and they accepted, fixed, and released v 3.1.1
Related
I've got a Redmine 3.4.4 installation running, which uses Ruby 2.2.5-p319 and Rails 4.2.8. We want to upgrade this to Redmine latest (currently 4.0.4) which requires Rails 5.
I'm running the new server using 4.0.4 using Ruby 2.6.3-p62 and Rails 5.2.3. Overall it's OK, but we have a number of plugins installed we would like to migrate. Many of these have had problems because of deprecations in Rails 5. I've managed to muddle my way through 8 of 9 plugins, even though I've not written Ruby on Rails before, but I'm stuck on the last one and just can't figure it out.
The plugin is the My Page Customization plugin and when I attempt to migrate the database and plugins I get this error:
[centos#redmine]$ bundle exec rake db:migrate RAILS_ENV=production
rake aborted!
NoMethodError: undefined method `alias_method_chain' for ActivitiesController:Class
Did you mean? alias_method
/usr/local/src/redmine-4.0.4/plugins/redmine_my_page/lib/my_page_patches/activities_controller_patch.rb:11:in `block in included'
/usr/local/src/redmine-4.0.4/plugins/redmine_my_page/lib/my_page_patches/activities_controller_patch.rb:7:in `class_eval'
/usr/local/src/redmine-4.0.4/plugins/redmine_my_page/lib/my_page_patches/activities_controller_patch.rb:7:in `included'
/usr/local/src/redmine-4.0.4/plugins/redmine_my_page/init.rb:30:in `include'
/usr/local/src/redmine-4.0.4/plugins/redmine_my_page/init.rb:30:in `block (2 levels) in <top (required)>'
So, it's clear that the deprecated 'alias_method_chain' is the issue here. After some digging I found a lot of references online such as this one which is good and clear, but I just can't get code written that works - I keep getting syntax errors and can't figure out what I'm doing wrong.
This is the original snippet from activities_controller_patch.rb:
module ActivitiesControllerPatch
def self.included(base) # :nodoc:
base.send(:include, InstanceMethods)
base.class_eval do
unloadable
helper :issues
helper :queries
alias_method_chain :index, :esi
end
end
We'd like to hang onto this plugin if we can even though it doesn't officially support Redmine 4. I'm hoping someone with better Ruby knowledge will be able to help.
Instead of
alias_method_chain :index, :esi
you'll just use
alias_method :index_without_esi, :index
alias_method :index, :index_with_esi
It was some kind of syntactic sugar.
I want to have https for entire application.
I decided to use this gem:
https://github.com/tobmatth/rack-ssl-enforcer
However after adding at end
gem 'rack-ssl-enforcer'
in Gemfile and
config.middleware.use Rack::SslEnforcer
in application.rb at end I get error:
/path_to_app/www/.ruby/gems/1.8/gems/railties-3.0.9/lib/rails/application.rb:77:in `send': undefined method `Rack' for #<App1::Application:0xf6dcb314> (NoMethodError)
from /path_to_app/www/.ruby/gems/1.8/gems/railties-3.0.9/lib/rails/application.rb:77:in `method_missing'
from /path_to_app/www/stolikarnia/config/application.rb:57
from /path_to_app/www/.ruby/gems/1.8/gems/railties-3.0.9/lib/rails/commands.rb:21:in `require'
from /path_to_app/www/.ruby/gems/1.8/gems/railties-3.0.9/lib/rails/commands.rb:21
from script/rails:6:in `require'
from script/rails:6
As you see from logs i use Rails 3.0.9. I can't upgrade to RoR 3.1.0 because of dependencies.
In your Gemfile change the requirement to
gem 'rack-ssl-enforcer', :require => 'rack/ssl-enforcer'
Then, in your application.rb pass the class name as String to take advantage of lazy evaluation.
config.middleware.use "Rack::SslEnforcer"
As a side note, I encourage you to check https://github.com/josh/rack-ssl. It's the middleware introduced in Rails 3.1. You can already use it in Rails 3.0 with the additional benefit you won't need to change it once you'll upgrade to Rails 3.1.
I am running ruby 1.9.2p18, Devise (1.3.4), Rails (3.0.4) and Omniauth (0.2.6).
Currently I have my webpage doing authentication with Devise, and it works fine.
I am trying to also add facebook authentication to it. I followed the instruction from https://github.com/plataformatec/devise/wiki/OmniAuth%3a-Overview .
When I do localhost:3000 I get
LoadError (no such file to load -- omniauth/core):
app/models/user.rb:3:in `<class:User>'
app/models/user.rb:1:in `<top (required)>'
config/routes.rb:6:in `block in <top (required)>'
config/routes.rb:1:in `<top (required)>'
and if refresh the page again sometimes I get
ActionController::RoutingError (No route matches "/")
I looked and under .rvm/gems/ruby-1.9.2-p180/gems/omniauth-0.2.6 I have the directory oa-core/ but not core/ .
I would really appreciate the help, I have no idea how to debug this one!
2 errors are different.
1. Error:
LoadError (no such file to load -- omniauth/core)
You need to add omniauth to your Gemfile and run 'bundle install'. If you've problem with it this Railscast might help:
Railscasts Omniauth 1
Also see 2 Devise videos on Railscasts.
2. Error:
ActionController::RoutingError (No route matches "/")
It says you haven't configured your app to have a main root. The main root is which matches "/".
- First choose which page you would like as landing page you or homepage. If you haven't created one then do it.
- Next you can find all named routes from shell by "rake routes".
- Then open config/routes.rb file and add main root by:
root :to => 'welcome#index'
substitute "welcome#index" with "your_chosen_controllers_name#chosen_method"
Don't add a named route created by Devise because it will end up with infinite loop ("stack level too deep" error).
Note that Devise wiki recommend no to use Devise if you've no prior experience with Rails. In this case I highly recommend to checkout Rails3.1 new has_secure_password? method.
HTH
I've been trying to play around with the Kaminari gem for pagination, but am running into problems.
I've got a simple starter project with a simple model:
class Position < ActiveRecord::Base
validates_presence_of :name
end
I'm running with ruby 1.9.2 and rails 3.0.5 on Ubuntu 10.04. I've installed kaminari (0.10.4).
From what I understand, I should be able to execute Position.order("name").page(1), but when I do so, I get the following:
ruby-1.9.2-p0 > Position.order("name").page(1)
NoMethodError: undefined method `page' for #<ActiveRecord::Relation:0xaacab34>
from /home/bob/.rvm/gems/ruby-1.9.2-p0#talentskout/gems/activerecord-3.0.5/lib/active_record/relation.rb:371:in `method_missing'
from (irb):2
from /home/bob/.rvm/gems/ruby-1.9.2-p0#talentskout/gems/railties-3.0.5/lib/rails/commands/console.rb:44:in `start'
from /home/bob/.rvm/gems/ruby-1.9.2-p0#talentskout/gems/railties-3.0.5/lib/rails/commands/console.rb:8:in `start'
from /home/bob/.rvm/gems/ruby-1.9.2-p0#talentskout/gems/railties-3.0.5/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
This seems about as simple a scenario as I can get. Any ideas would be greatly appreciated.
Thanks.
Rails noob here: had precisely the same issue but for a different reason - I found I had to restart the server after adding the kaminari gem and running bundle install. Just mentioning it in case someone else has the same problem!
I figured out my problem, and it have nothing to do with the Kaminari gem per se.
In my Gemfile, I had put the gem 'kaminari' clause under my group :test section by mistake. So it wasn't loading in my development environment. Silly mistake.
I'm also a Rails noob and had the same error. I could solve the problem by changing Model.all to Model.order("id").
I am deploying my Jruby Rails application on glassfish with acts_as_audited as a gem/plugin installed.
Whenever I try to Audit my model, I am going to get the following error.
My Environment is: Jruby 1.6.0.RC2, Rails 3.0.3
You can refer here if you guys want to look more on the error http://www.ruby-forum.com/topic/1053934
Please help me out, I stuck up here
Application Error
org.jruby.rack.RackInitializationException: undefined method `cache_sweeper' for ActionController::Base:Class
from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/acts_as_audited-2.0.0.rc6/lib/acts_as_audited.rb:44:in `class_eval'
from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/acts_as_audited-2.0.0.rc6/lib/acts_as_audited.rb:44
from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/acts_as_audited-2.0.0.rc6/lib/acts_as_audited.rb:68:in `require'
from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `require'
from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `each'
from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `require'
from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `each'
from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `require'
... 20 levels...
I reported this problema as a bug in jruby-rack.
A workaround is to add require 'active_record' if defined? $servlet_context after require 'rubygems' in config/boot.rb or manually including sweeping somwhere in application.rb ActionController::Base.send(:include, ActionController::Caching::Sweeping) if defined? $servlet_context.
I think I recognise this problem. It looks like acts_as_audited uses cache sweepers. I've had this problem with cache sweepers.
You need to explicitly include the caching module in your ApplicationController:
class ApplicationController < ActionController::Base
# JRuby not finding cache sweeper at runtime in production
include ActionController::Caching::Sweeping if defined?(JRUBY_VERSION)
# Rest of your class here...
end
I'm not sure why this happens, but it's probably a loading/resolution issue related to running in threadsafe mode for production.