views:

1197

answers:

2

Hi, i have looked through the list of related questions however my problem does not seem to be listed and hence here it is:

Basically I'm trying to use Geokit within the Ruby on Rails environment, im not sure if i installed it properly, I have included it within the environment.rb (and done rake db:install) and i'm now trying to do the following:

require 'active_record'
require 'geokit'

class Store < ActiveRecord::Base
    acts_as_mappable
end

Unforunately, when i try to run this and see if its ok, i get the following error:

c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:1959:in `method_missing': undefined local variable or method `acts_as_mappable' for #<Class:0x4cd261c> (NameError)
    from C:/Users/Erika/Documents/Visual Studio 2008/Projects/StoreLocator/StoreLocator/app/models/store.rb:5

I am running Ruby in Steel for Visual Studio 2008, i'm not sure what i'm doing wrong as all the online tutorials i find tend to be rather old and done apply to me. Any help would be greatly appreciated. thanks!

Edit: (adding as per Ben's Request) The following is what my environment.rb looks like

# Be sure to restart your server when you modify this file

# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.3.4' unless defined? RAILS_GEM_VERSION

# Bootstrap the Rails environment, frameworks, and default configuration
require File.join(File.dirname(__FILE__), 'boot')

Rails::Initializer.run do |config|
  # Settings in config/environments/* take precedence over those specified here.
  # Application configuration should go into files in config/initializers
  # -- all .rb files in that directory are automatically loaded.

  # Add additional load paths for your own custom dirs
  # config.load_paths += %W( #{RAILS_ROOT}/extras )

  # Specify gems that this application depends on and have them installed with rake gems:install
  # config.gem "bj"
  # config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
  # config.gem "sqlite3-ruby", :lib => "sqlite3"
  # config.gem "aws-s3", :lib => "aws/s3"
  config.gem "geokit"
  config.gem "ym4r"

  # Only load the plugins named here, in the order given (default is alphabetical).
  # :all can be used as a placeholder for all plugins not explicitly named
  # config.plugins = [ :exception_notification, :ssl_requirement, :all ]

  # Skip frameworks you're not going to use. To use Rails without a database,
  # you must remove the Active Record framework.
  # config.frameworks -= [ :active_record, :active_resource, :action_mailer ]

  # Activate observers that should always be running
  # config.active_record.observers = :cacher, :garbage_collector, :forum_observer

  # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
  # Run "rake -D time" for a list of tasks for finding time zone names.
  config.time_zone = 'UTC'

  # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
  # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')]
  # config.i18n.default_locale = :de
end

# These defaults are used in GeoKit::Mappable.distance_to and in acts_as_mappable
GeoKit::default_units = :kms
GeoKit::default_formula = :sphere

# This is the timeout value in seconds to be used for calls to the geocoder web
# services.  For no timeout at all, comment out the setting.  The timeout unit
# is in seconds. 
#GeoKit::Geocoders::timeout = 3

# These settings are used if web service calls must be routed through a proxy.
# These setting can be nil if not needed, otherwise, addr and port must be 
# filled in at a minimum.  If the proxy requires authentication, the username
# and password can be provided as well.
GeoKit::Geocoders::proxy_addr = nil
GeoKit::Geocoders::proxy_port = nil
GeoKit::Geocoders::proxy_user = nil
GeoKit::Geocoders::proxy_pass = nil

# This is your yahoo application key for the Yahoo Geocoder.
GeoKit::Geocoders::yahoo = 'REPLACE_WITH_YOUR_YAHOO_KEY'

# This is your Google Maps geocoder key. 
GeoKit::Geocoders::google = 'apikey'

# This is your username and password for geocoder.us.
# To use the free service, the value can be set to nil or false.  For 
# usage tied to an account, the value should be set to username:password.
GeoKit::Geocoders::geocoder_us = false 

# This is your authorization key for geocoder.ca.
# To use the free service, the value can be set to nil or false.  For 
# usage tied to an account, set the value to the key obtained from
# Geocoder.ca.

GeoKit::Geocoders::geocoder_ca = false

# This is the order in which the geocoders are called in a failover scenario
# If you only want to use a single geocoder, put a single symbol in the array.
# Valid symbols are :google, :yahoo, :us, and :ca.
# Be aware that there are Terms of Use restrictions on how you can use the 
# various geocoders.  Make sure you read up on relevant Terms of Use for each
# geocoder you are going to use.
GeoKit::Geocoders::provider_order = [:google]
A: 

What method are you using to include the geokit library? The plugin? The gem? Is the gem unpacked into vendor? What does your environment.rb look like?

Edit: I meant to leave this as a comment on the question - pardon me.

Ben
I am added the gem to the project, within my project folders, the vendor file is empty however. I have updated my post to add details about the environment.rb which is rather empty. Thanks a lot for your assistance
Erika
The only thing out of the ordinary that I see, comparing this to some of my projects is that you're requiring activerecord and geokit in your model file - that is unnecessary and may be causing complications. Remove those two lines and try again. If that doesn't work, try doing rake gems:unpack to vendor your gems.
Ben
Thanks, i have done rake gems:unpack, however in the model file, if i dont specify "require .... " then not even activerecord is recognised. I have also added some code to my environment.rb (another edit). I'm still lost unfortunately :s
Erika
Is there anything non-standard about this Rails app, or the way you are invoking it? You should most definitely not have to require activerecord -- I think you've got bigger problems.
Ben
im not sure why, but during migration to create what i require, it makes use of ActiveRecord and when i try to rake the file, it wouldnt execute unless i added the 'require ..' =/ (i'm just a newbie to ruby on rails)
Erika
Did this app ever work?
Ben
im trying to get it to do so :/ seeing that most tutorials are either outdated, depreciated and so on its not that easy for someone whos new to the language to get around things =\
Erika
By my question, I mean, did this app work before you added the geokit functionality? Can you scaffold a basic rails app and make it run? The Rails Guides project has up-to-date tutorials. http://guides.rails.info
Ben
the basic scaffold works yes, however when i installed the geokit-rails addon, this only seems to add an empty folder within the vendor/plugins! Its probably not installing properly or something of that sort from the looks of it
Erika
Thank you so much, i finally resolved the issue by downloading the code in zip, running the install rb file and i also just scrapped my previous project and re-started it, it looked like i didn't have to add require "active_record" each time after all! thanks so much for your assistance
Erika
+1  A: 

acts_as_mappable is part of geokit-rails. You need to install the geokit-rails plugin.

script/plugin install git://github.com/andre/geokit-rails.git

To check if the plugin is properly installed, look under the vendor/plugins directory of your Rails app. It should have a geokit-rails sub directory. It it, you'll find all the plugin files, other subdirectories, including the file acts_as_mappable.rb (in vendor\plugins\geokit-rails\lib\geokit-rails).

If everything seems to be properly installed, try adding "require geokit" to the top of the init.rb file in the plugin root folder (vendor\plugins\geokit-rails).

Be sure to restart your app server after making the modifications.

JRL
Oh jeez you're right. I use the plugin, didn't even think about the role of the gem. Still majorly confused by the `require "active_record"` business.
Ben
When i installed it, it told me it was already installed, am i supposed to do something else apart from installing it please? might it be confusing it with the other geo-kit perhaps? thanks a lot for help so far to both
Erika
after trying and re-trying, there must be some problem. When i try to install the above plugin it keeps saying "Plugin not found: []" when i run it with --trace. Any ideas?
Erika
Thanks so much, the solution was to download a zipped version of the code from <code> http://github.com/andre/geokit-rails </code> (as it seems i have some issues with script/install). Running the install.rb file completely resolved the issue. thanks once again
Erika