На Amazon EC2 с использованием Ubuntu, когда я выполняю rake db: migrate as:
bundle exec rake db:migrate RAILS_ENV="production" --trace
Я получаю ошибку ActiveRecord :: ConnectionNotEstablished , как показано ниже
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
rake aborted!
ActiveRecord::ConnectionNotEstablished
/usr/local/rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:316:in `retrieve_connection'
Я могу войти в MySQL с именем пользователя и паролем в моем файле config / database.yml
и база данных есть. Так что MySQL работает, и это не проблема.
Мой файл config / database.yml выглядит так:
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: app_production
pool: 5
username: root
password: password
host: localhost
socket: /run/mysqld/mysqld.sock
Вот мои драгоценные камни из списка драгоценных камней:
abstract (1.0.0)
actionmailer (3.0.3)
actionpack (3.0.3)
activemodel (3.0.3)
activerecord (3.0.3)
activeresource (3.0.3)
activesupport (3.0.3)
arel (2.0.10)
builder (2.1.2)
bundler (1.0.10 ruby)
cgi_multipart_eof_fix (2.5.0)
daemons (1.0.10)
erubis (2.6.6)
eventmachine (0.12.10)
fastthread (1.0.7)
gem_plugin (0.2.3)
i18n (0.6.0)
mail (2.2.19)
mime-types (1.17.2)
mongrel (1.2.0.pre2)
mysql2 (0.2.7)
polyglot (0.3.3)
rack (1.2.5)
rack-mount (0.6.14)
rack-test (0.5.7)
rails (3.0.3)
railties (3.0.3)
rake (0.9.2.2)
rmagick (2.13.1)
thin (1.2.7)
thor (0.14.6)
treetop (1.4.10)
tzinfo (0.3.31)
xmpp4r (0.5)
Ошибка в connection_pool.rb происходит в том же месте, как описано в этом посте , в ответе которого говорится, что необходимо установить соединение с ActiveRecord :: Base. Сбой кода в connection_pool.rb, потому что он отправляется klass = ActiveRecord :: Base, который не имеет соединения. Поэтому я попытался создать модель my_connection_base.rb, которая выглядит следующим образом
require 'active_record'
class MyConnectionBase < ActiveRecord::Base
MyConnectionBase.establish_connection(
:adapter => "mysql2",
:host => "localhost",
:username => "<your database username>",
:password => "<your database password>",
:database => File.dirname(__FILE__) + "app_production"
)
self.abstract_class = true
end
И тогда все мои модели наследуют MyConnectionBase, как в role.rb ниже:
require 'my_connection_base'
class Role < MyConnectionBase
has_and_belongs_to_many :users
end
Но я все еще получаю ActiveRecord :: ConnectionNotEstablished при попытке запустить миграцию. Есть ли что-то еще, что мне нужно сделать с Rails 3, чтобы убедиться, что соединение установлено с mysql перед выполнением миграции?