Getting uninitialized constant Vanity::Adapters::ActiveRecordAdapter in Rails 5
alexvbush opened this issue · 5 comments
Hi, I'm trying to setup Vanity with a brand new Rails 5 app with Postgres. I've added gem "vanity"
to my Gemfile
, launched bundle exec rails generate vanity
which created the following migration file:
class VanityMigration < ActiveRecord::Migration
# Helper methods to ensure we're connecting to the right database, see
# https://github.com/assaf/vanity/issues/295.
def connection
@connection ||= ActiveRecord::Base.connection
end
alias_method :default_connection, :connection
def with_vanity_connection
@connection = Vanity::Adapters::ActiveRecordAdapter::VanityRecord.connection
yield
@connection = default_connection
end
def up
with_vanity_connection do
create_table :vanity_metrics do |t|
t.string :metric_id
t.datetime :updated_at
end
add_index :vanity_metrics, [:metric_id]
create_table :vanity_metric_values do |t|
t.integer :vanity_metric_id
t.integer :index
t.integer :value
t.string :date
end
add_index :vanity_metric_values, [:vanity_metric_id, :date]
create_table :vanity_experiments do |t|
t.string :experiment_id
t.integer :outcome
t.boolean :enabled
t.datetime :created_at
t.datetime :completed_at
end
add_index :vanity_experiments, [:experiment_id]
create_table :vanity_conversions do |t|
t.integer :vanity_experiment_id
t.integer :alternative
t.integer :conversions
end
add_index :vanity_conversions, [:vanity_experiment_id, :alternative], :name => "by_experiment_id_and_alternative"
create_table :vanity_participants do |t|
t.string :experiment_id
t.string :identity
t.integer :shown
t.integer :seen
t.integer :converted
t.timestamps null: false
end
add_index :vanity_participants, [:experiment_id]
add_index :vanity_participants, [:experiment_id, :identity], :name => "by_experiment_id_and_identity"
add_index :vanity_participants, [:experiment_id, :shown], :name => "by_experiment_id_and_shown"
add_index :vanity_participants, [:experiment_id, :seen], :name => "by_experiment_id_and_seen"
add_index :vanity_participants, [:experiment_id, :converted], :name => "by_experiment_id_and_converted"
end
end
def down
with_vanity_connection do
drop_table :vanity_metrics
drop_table :vanity_metric_values
drop_table :vanity_experiments
drop_table :vanity_conversions
drop_table :vanity_participants
end
end
end
But when I next run be rails db:migrate
it throws the following error:
/Users/alex/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:51: warning: constant ::Fixnum is deprecated
/Users/alex/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:52: warning: constant ::Bignum is deprecated
/Users/alex/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/core_ext/numeric/conversions.rb:138: warning: constant ::Fixnum is deprecated
== 20170202042511 VanityMigration: migrating ==================================
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:
uninitialized constant Vanity::Adapters::ActiveRecordAdapter
/Users/alex/workspace/ios-interview-guide-website/db/migrate/20170202042511_vanity_migration.rb:11:in `with_vanity_connection'
/Users/alex/workspace/ios-interview-guide-website/db/migrate/20170202042511_vanity_migration.rb:17:in `up'
/Users/alex/workspace/ios-interview-guide-website/bin/rails:9:in `require'
/Users/alex/workspace/ios-interview-guide-website/bin/rails:9:in `<top (required)>'
/Users/alex/workspace/ios-interview-guide-website/bin/spring:15:in `require'
/Users/alex/workspace/ios-interview-guide-website/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
NameError: uninitialized constant Vanity::Adapters::ActiveRecordAdapter
/Users/alex/workspace/ios-interview-guide-website/db/migrate/20170202042511_vanity_migration.rb:11:in `with_vanity_connection'
/Users/alex/workspace/ios-interview-guide-website/db/migrate/20170202042511_vanity_migration.rb:17:in `up'
/Users/alex/workspace/ios-interview-guide-website/bin/rails:9:in `require'
/Users/alex/workspace/ios-interview-guide-website/bin/rails:9:in `<top (required)>'
/Users/alex/workspace/ios-interview-guide-website/bin/spring:15:in `require'
/Users/alex/workspace/ios-interview-guide-website/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
Seems like Vanity::Adapters::ActiveRecordAdapter
isn't loaded, although, when I run rails consolse
I am able to call Vanity::Adapters::ActiveRecordAdapter
. Can anyone suggest a solution?
my config/vanity.yml
looks like this
default: &default
#adapter: postgresql
adapter: active_record
active_record_adapter: postgresql
encoding: unicode
# For details on connection pooling, see rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: ios-interview-guide-website_development
username: ios-interview-guide-website
test:
<<: *default
database: ios-interview-guide-website_test
username: ios-interview-guide-website
collecting: false
production:
<<: *default
database: ios-interview-guide-website_production
username: ios-interview-guide-website
password: <%= ENV['IOS-INTERVIEW-GUIDE-WEBSITE_DATABASE_PASSWORD'] %>
Hey, sorry for the slow response on this. As a workaround, does adding require Vanity::Adapters::ActiveRecordAdapter
at the top of the file by hand fix the problem?
anyone any luck with this?
Same issue, loading fine in console, breaking migration with no including or requiring fixing it.
Using require "vanity/adapters/active_record_adapter"
at the top of the migration seems to fix this issue for me.