ERROR: column “category” does not exist

I’ve recently switched from SQLite3 to PostGreSQL and came across the following error this morning:

my_app_development=> select category from codes;
ERROR:  column "category" does not exist
LINE 1: select category from codes;

The following post solved the issues in one sentence:

http://archives.postgresql.org/pgsql-novice/2007-01/msg00032.php

Yes. In postgres, unquoted column and table names are converted to lower case.

The user also added that when using PostGreSql you should either be always, or never using quotes around column names.

Heroku Upload – Permission Denied

I ran into a bit of trouble uploading an app to heroku for the first time, I was unable to authenticate.

root@chris-VirtualBox:~/site# git push heroku master
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

This turned out to be an issue with my public key, in order to fix it simply create a new one:

root@chris-VirtualBox:~/site# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
...

Re-upload it:

root@chris-VirtualBox:~/site# heroku keys:add /root/.ssh/id_rsa.pub
Uploading ssh public key /root/.ssh/id_rsa.pub

And finally re-push everything:

root@chris-VirtualBox:~/site# git push heroku master
Enter passphrase for key '/root/.ssh/id_rsa': 
Counting objects: 579, done.
Compressing objects: 100% (513/513), done.
Writing objects: 100% (579/579), 6.09 MiB | 83 KiB/s, done.
Total 579 (delta 101), reused 0 (delta 0)

-----> Heroku receiving push
-----> Ruby/Rails app detected

This Heroku page actually provides quite a bit of info if you’re still having problems: http://devcenter.heroku.com/articles/rails3

PostgreSQL Installation Error – Ruby

I ran into a bit of problem moving an app to a test Heroku host – I needed to install PostgreSQL. I added the following to my Gemfile:

#Gemfile
#gem 'sqlite3'
gem 'pg'

I then tried to run bundle install:

root@chris-VirtualBox:~/site# bundle install

However I received the following error:

root@chris-VirtualBox:~/site# bundle install


Fetching source index for http://rubygems.org/
Using rake (0.9.2) 
Using multi_json (1.0.3) 
Using activesupport (3.1.1) 
Using builder (3.0.0) 
Using i18n (0.6.0) 
Using activemodel (3.1.1) 
Using erubis (2.7.0) 
Using rack (1.3.4) 
Using rack-cache (1.1) 
Using rack-mount (0.8.3) 
Using rack-test (0.6.1) 
Using hike (1.2.1) 
Using tilt (1.3.3) 
Using sprockets (2.0.2) 
Using actionpack (3.1.1) 
Using mime-types (1.16) 
Using polyglot (0.3.2) 
Using treetop (1.4.10) 
Using mail (2.3.0) 
Using actionmailer (3.1.1) 
Using arel (2.2.1) 
Using tzinfo (0.3.30) 
Using activerecord (3.1.1) 
Using activeresource (3.1.1) 
Using bundler (1.0.21) 
Using rack-ssl (1.3.2) 
Using json (1.6.1) 
Using rdoc (3.10) 
Using thor (0.14.6) 
Using railties (3.1.1) 
Using rails (3.1.1) 
Using acts-as-taggable-on (2.1.1) 
Using awesome_nested_set (2.0.2) 
Using bcrypt-ruby (3.0.1) 
Using carrierwave (0.5.7) 
Using cocaine (0.2.0) 
Using coffee-script-source (1.1.2) 
Using execjs (1.2.9) 
Using coffee-script (2.2.0) 
Using coffee-rails (3.1.1) 
Using orm_adapter (0.0.5) 
Using warden (1.0.6) 
Using devise (1.4.8) 
Using escape (0.0.4) 
Using geocoder (1.0.5) from git://github.com/alexreisner/geocoder.git (at no_grouping) 
Using jquery-rails (1.0.16) 
Using libv8 (3.3.10.2) 
Using nokogiri (1.5.0) 
Using paperclip (2.4.5) 
Installing pg (0.12.2) with native extensions 
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /usr/bin/ruby1.8 extconf.rb 
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/usr/bin/ruby1.8
	--with-pg
	--without-pg
	--with-pg-dir
	--without-pg-dir
	--with-pg-include
	--without-pg-include=${pg-dir}/include
	--with-pg-lib
	--without-pg-lib=${pg-dir}/lib
	--with-pg-config
	--without-pg-config
	--with-pg_config
	--without-pg_config


Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/pg-0.12.2 for inspection.
Results logged to /usr/lib/ruby/gems/1.8/gems/pg-0.12.2/ext/gem_make.out
An error occured while installing pg (0.12.2), and Bundler cannot continue.
Make sure that `gem install pg -v '0.12.2'` succeeds before bundling.

It turned out that because I was on Ubuntu I needed to install the libpq-dev package:

root@chris-VirtualBox:~/site# apt-get install libpq-dev


Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-2.6.38-8 linux-headers-2.6.38-8-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  comerr-dev krb5-multidev libgssapi-krb5-2 libgssrpc4 libk5crypto3
  libkadm5clnt-mit7 libkadm5srv-mit7 libkdb5-4 libkrb5-3 libkrb5-dev
  libkrb5support0 libpq5 libssl-dev
Suggested packages:
  krb5-doc krb5-user postgresql-doc-8.4
The following NEW packages will be installed:
  comerr-dev krb5-multidev libgssrpc4 libkadm5clnt-mit7 libkadm5srv-mit7
  libkdb5-4 libkrb5-dev libpq-dev libpq5 libssl-dev
The following packages will be upgraded:
  libgssapi-krb5-2 libk5crypto3 libkrb5-3 libkrb5support0
4 upgraded, 10 newly installed, 0 to remove and 106 not upgraded.
Need to get 3,142 kB of archives.
After this operation, 8,520 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://au.archive.ubuntu.com/ubuntu/ natty-updates/main libk5crypto3 i386 1.8.3+dfsg-5ubuntu2.2 [76.7 kB]
Get:2 http://au.archive.ubuntu.com/ubuntu/ natty-updates/main libgssapi-krb5-2 i386 1.8.3+dfsg-5ubuntu2.2 [100 kB]
Get:3 http://au.archive.ubuntu.com/ubuntu/ natty-updates/main libkrb5-3 i386 1.8.3+dfsg-5ubuntu2.2 [327 kB]
Get:4 http://au.archive.ubuntu.com/ubuntu/ natty-updates/main libkrb5support0 i386 1.8.3+dfsg-5ubuntu2.2 [22.2 kB]
Get:5 http://au.archive.ubuntu.com/ubuntu/ natty-updates/main libgssrpc4 i386 1.8.3+dfsg-5ubuntu2.2 [54.6 kB]
Get:6 http://au.archive.ubuntu.com/ubuntu/ natty-updates/main libkadm5clnt-mit7 i386 1.8.3+dfsg-5ubuntu2.2 [38.7 kB]
Get:7 http://au.archive.ubuntu.com/ubuntu/ natty-updates/main libkdb5-4 i386 1.8.3+dfsg-5ubuntu2.2 [38.1 kB]
Get:8 http://au.archive.ubuntu.com/ubuntu/ natty-updates/main libkadm5srv-mit7 i386 1.8.3+dfsg-5ubuntu2.2 [51.6 kB]
Get:9 http://au.archive.ubuntu.com/ubuntu/ natty/main comerr-dev i386 2.1-1.41.14-1ubuntu3 [41.5 kB]
Get:10 http://au.archive.ubuntu.com/ubuntu/ natty-updates/main krb5-multidev i386 1.8.3+dfsg-5ubuntu2.2 [82.5 kB]
Get:11 http://au.archive.ubuntu.com/ubuntu/ natty-updates/main libpq5 i386 8.4.10-0ubuntu0.11.04.1 [81.6 kB]
Get:12 http://au.archive.ubuntu.com/ubuntu/ natty/main libssl-dev i386 0.9.8o-5ubuntu1 [2,019 kB]
Get:13 http://au.archive.ubuntu.com/ubuntu/ natty-updates/main libkrb5-dev i386 1.8.3+dfsg-5ubuntu2.2 [15.0 kB]
Get:14 http://au.archive.ubuntu.com/ubuntu/ natty-updates/main libpq-dev i386 8.4.10-0ubuntu0.11.04.1 [193 kB]
Fetched 3,142 kB in 6s (506 kB/s)                                              
(Reading database ... 167506 files and directories currently installed.)
Preparing to replace libk5crypto3 1.8.3+dfsg-5ubuntu2.1 (using .../libk5crypto3_1.8.3+dfsg-5ubuntu2.2_i386.deb) ...
Unpacking replacement libk5crypto3 ...
Preparing to replace libgssapi-krb5-2 1.8.3+dfsg-5ubuntu2.1 (using .../libgssapi-krb5-2_1.8.3+dfsg-5ubuntu2.2_i386.deb) ...
Unpacking replacement libgssapi-krb5-2 ...
Preparing to replace libkrb5-3 1.8.3+dfsg-5ubuntu2.1 (using .../libkrb5-3_1.8.3+dfsg-5ubuntu2.2_i386.deb) ...
Unpacking replacement libkrb5-3 ...
Preparing to replace libkrb5support0 1.8.3+dfsg-5ubuntu2.1 (using .../libkrb5support0_1.8.3+dfsg-5ubuntu2.2_i386.deb) ...
Unpacking replacement libkrb5support0 ...
Selecting previously deselected package libgssrpc4.
Unpacking libgssrpc4 (from .../libgssrpc4_1.8.3+dfsg-5ubuntu2.2_i386.deb) ...
Selecting previously deselected package libkadm5clnt-mit7.
Unpacking libkadm5clnt-mit7 (from .../libkadm5clnt-mit7_1.8.3+dfsg-5ubuntu2.2_i386.deb) ...
Selecting previously deselected package libkdb5-4.
Unpacking libkdb5-4 (from .../libkdb5-4_1.8.3+dfsg-5ubuntu2.2_i386.deb) ...
Selecting previously deselected package libkadm5srv-mit7.
Unpacking libkadm5srv-mit7 (from .../libkadm5srv-mit7_1.8.3+dfsg-5ubuntu2.2_i386.deb) ...
Selecting previously deselected package comerr-dev.
Unpacking comerr-dev (from .../comerr-dev_2.1-1.41.14-1ubuntu3_i386.deb) ...
Selecting previously deselected package krb5-multidev.
Unpacking krb5-multidev (from .../krb5-multidev_1.8.3+dfsg-5ubuntu2.2_i386.deb) ...
Selecting previously deselected package libpq5.
Unpacking libpq5 (from .../libpq5_8.4.10-0ubuntu0.11.04.1_i386.deb) ...
Selecting previously deselected package libssl-dev.
Unpacking libssl-dev (from .../libssl-dev_0.9.8o-5ubuntu1_i386.deb) ...
Selecting previously deselected package libkrb5-dev.
Unpacking libkrb5-dev (from .../libkrb5-dev_1.8.3+dfsg-5ubuntu2.2_i386.deb) ...
Selecting previously deselected package libpq-dev.
Unpacking libpq-dev (from .../libpq-dev_8.4.10-0ubuntu0.11.04.1_i386.deb) ...
Processing triggers for man-db ...
Processing triggers for doc-base ...
Processing 1 added doc-base file(s)...
Registering documents with scrollkeeper...
Processing triggers for install-info ...
Setting up libkrb5support0 (1.8.3+dfsg-5ubuntu2.2) ...
Setting up libk5crypto3 (1.8.3+dfsg-5ubuntu2.2) ...
Setting up libkrb5-3 (1.8.3+dfsg-5ubuntu2.2) ...
Setting up libgssapi-krb5-2 (1.8.3+dfsg-5ubuntu2.2) ...
Setting up libgssrpc4 (1.8.3+dfsg-5ubuntu2.2) ...
Setting up libkadm5clnt-mit7 (1.8.3+dfsg-5ubuntu2.2) ...
Setting up libkdb5-4 (1.8.3+dfsg-5ubuntu2.2) ...
Setting up libkadm5srv-mit7 (1.8.3+dfsg-5ubuntu2.2) ...
Setting up comerr-dev (2.1-1.41.14-1ubuntu3) ...
Setting up krb5-multidev (1.8.3+dfsg-5ubuntu2.2) ...
Setting up libpq5 (8.4.10-0ubuntu0.11.04.1) ...
Setting up libssl-dev (0.9.8o-5ubuntu1) ...
Setting up libkrb5-dev (1.8.3+dfsg-5ubuntu2.2) ...
Setting up libpq-dev (8.4.10-0ubuntu0.11.04.1) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
root@chris-VirtualBox:~/site# 

And then just run bundle install again:

root@chris-VirtualBox:~/site# bundle install

There’s some documentation on the gems wiki page: https://bitbucket.org/ged/ruby-pg/wiki/Home

Unable to edit files uploaded to document library where url length is more than 260 characters – SharePoint

Just a quick problem I came across in SharePoint today when trying to edit a file:

Unable to edit files uploaded to document library where url length is more than 260 characters

The folder structure being used was fairly complex, unfortunately this meant that a filename only had to be a few characters long to exceed this rule. Unfortunately there does not appear to be an easy way to fix this issue other than reorganizing the folder structure.

One workaround is to simply press the “Open with Explorer” button and edit the file that way. Thankfully the url limitation does not effect files reached through this method.

Open with Explorer - SharePoint
Open with Explorer - SharePoint

This link has a bit more info for anyone who may be interested.

Devise Overriding Controller Route – Ruby on Rails

I ran into a bit of a problem today after implementing a search form that appeared on every page. When the login page was loaded I received the following error:

No route matches {:controller=>”devise/products”, :method=>:get, :action=>”search”}

The weird thing about this is that the route my search form uses does not mention devise in any way:

 'products', :action => 'search', :method => :get do %>

As you have probably already guessed, I’m using devise to handle my authentication. Unfortunately this seems to be overriding some of my routes whenever it co-exists with another form. Luckily there exists a very simple, although hard to find solution – simply add a forward slash before the controller definition:

 '/products', :action => 'search', :method => :get do %>

Here’s a quick link to the StackOverflow post which gave the answer, hopefully a few more links to it will make it a little easier to find for anyone else out there doing a search!

ActiveRecord::HasManyThroughAssociation NotFoundError – Ruby on Rails

I ran into a bit of a problem with a has_many relationship in rails today:

ActiveRecord::HasManyThroughAssociationNotFoundError in FeedbacksController#index

Could not find the association :sub_orders in model User

This turned out to be a fairly simple fix, I had forgotten to add a has_many relationship before adding the has_many :through => x relationship. There is a fairly detailed explanation on StackOverflow for anyone who is curious.

undefined method `to_sym’ for nil:NilClass – Ruby on Rails Migration

While trying to do a migration today I received the following message:

undefined method `to_sym’ for nil:NilClass

#After running a trace (rake db:migrate –trace)
undefined method `to_sym’ for nil:NilClass
/usr/lib/ruby/gems/1.8/gems/activesupport-3.1.1/lib/active_support/whiny_nil.rb:48:in `method_missing’

This was the migration:

class AddDefaultValuesToFeedbacks  0
    change_column :stores, :rating, :decimal, :precision => 8, :scale => 2, :default => 0
  end
end

Unfortunately this problem also prevented me from performing any other migrations on the table. I attempted deleting all relevant migration files and then re-running them, restarting the server and rolling back to a previous migration – none of which worked.

Eventually I resorted to exporting the dataset, dropping the table via sqlite3 and recreating it. Thankfully this seems to have worked. The only hint I’ve come across that may explain the cause of this problem, other than typos or referring to non-existant columns, is that it can occur if a migration is screwed over before it finishes and fails to rollback properly.

If anyone else has any concrete answers, please let me know in the comments!

Debugging with Exceptions – Ruby on Rails

Ran into a bit of trouble with a model today, after a bit of a google I came across this technique which helped me solve it:

#Raise exception on object.inspect
raise Object.inspect

#Example 1
raise order.inspect

#Example 2
raise [sub_orders.count].inspect

This simply allows you display variable values as an exception. By placing a few of these throughout your troublesome code you can simulate a fully targeted trace.

Error when trying to Edit a SharePoint Document – SharePoint

Ran into the following error when trying to open a word document stored on SharePoint today:

The document could not be opened for editing. A Microsoft SharePoint Foundation compatible application could not be found to edit the document.

Unfortunately this appears to be an issue with Chrome, once I switched to IE it all worked fine.

Uncaught TypeError: Object # has no method ‘toggle’ – jQuery

Ran into a bit of a problem with jQuery today, not entirely sure what the issue was but apparently it did not like me using the .get() function. I received the following error:

//Enable toggling of sub_order display
$(document).ready(function() {
    $('.expanding_header').click(function(){
      $(this).find('.expanding_content').get(0).toggle('slow', function() {
      });
    });
});
Uncaught TypeError: Object # has no method ‘toggle’

By substituting the get function with a :first selector the error does not occur:

$(document).ready(function() {
    $('.expanding_header').click(function(){
      $(this).find('.expanding_content:first').toggle('slow', function() {
      });
    });
});