我是一个新的
Ruby程序员,我的同事帮助我开始写下面的代码,在他的环境中运行良好.但是,当我尝试在我自己的环境中运行它时,我会发现以下错误:#< Hash:0x1012392c0>的未定义方法’with_indifferent_access’. (NoMethodError)
- require 'rubygems'
- gem 'activerecord'
- gem 'activesupport'
- gem 'sailthru-client'
- require 'active_support'
- require 'active_record'
- require 'sailthru'
- # Setup our Sailthru object using our production Sailthru account information
- sailthru = Sailthru::SailthruClient.new()
- # Read database information from the database.yml file
- CONFIG = YAML.load_file(File.join(File.dirname(__FILE__),'database.yml')).with_indifferent_access
- # Create a simple way for us to iterate through all publications
- class Publication < ActiveRecord::Base
- establish_connection CONFIG[:production]
- set_table_name 'publications'
- end
- # Create a simple way for us to store data locally
- class CurrentReport < ActiveRecord::Base
- establish_connection CONFIG[:development]
- set_table_name 'current_reports'
- end
- class MonthlyReport < ActiveRecord::Base
- establish_connection CONFIG[:development]
- set_table_name 'monthly_reports'
- end
- types = %w[Daily Weekly]
- Publication.find_each(:select => :id) do |publication|
- begin
- types.each do |newsletter_type|
- # Get the stats for each mailing list
- response = sailthru.stats_list("#{newsletter_type} Newsletter - #{publication.id}").with_indifferent_access
- if response[:error]
- puts "Sailthru Error #{response[:error]}: #{response[:errormsg]}"
- else
- # Try to find an existing record for this newsletter
- daily = CurrentReport.find_or_initialize_by_list(response[:list])
- # and update it with the information from the response (minus the monthly signup info)
- puts "Updating #{newsletter_type} Newsletter - #{publication.id} ..."
- daily.update_attributes(response.reject { |k,v| k =~ /signup/ })
- # Iterate through the monthly signup info
- response['signup_month'].each do |k,v|
- # And try to save it
- monthly = MonthlyReport.find_or_initialize_by_list_and_month(response[:list],k)
- # Only save new months,because the old months never change
- if monthly.new_record?
- monthly.update_attributes(v)
- puts "\tAdding #{v[:month]} to #{response[:list]} ..."
- end
- end
- end
- end
- # rescue NoMethodError => e
- # puts "Got a NoMethodError for some reason. Here's the publication: #{publication.inspect}\n\nHere's the types array: #{types}"
- end
- end
我尝试过不同版本的ruby,比如ruby-1.8.7,但无济于事.我对如何解决这个问题感到茫然.我知道这个方法存在于某处,因为我看到它有效.我对接下来要尝试的任何建议持开放态度.