Eu vi essa pergunta antes, mas apenas para rspec. Ainda não criei o teste porque é muito avançado para mim, mas um dia farei! : P
Recebo este erro quando tento me inscrever / fazer login em meu aplicativo. Usei o devise para criar o usuário e também o omniauth2 para fazer login no google .
este é o erro
ActiveRecord::StatementInvalid at /users/auth/google_oauth2/callback
PG::UndefinedTable: ERROR: relation "users" does not exist
LINE 5: WHERE a.attrelid = '"users"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"users"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
Já tentei rake db:migrate
, mas já está criado: na tabela de esquema existem usuários. Alguém já teve esse erro antes?
database.yml
config = / opt / local / lib / postgresql84 / bin / pg_config
development:
adapter: postgresql
encoding: unicode
database: tt_intraweb_development
pool: 5
username: my_username
password:
test:
adapter: postgresql
encoding: unicode
database: tt_intraweb_test
pool: 5
username: my_username
password:
production:
adapter: postgresql
encoding: unicode
database: tt_intraweb_production
pool: 5
username: my_username
password:
RAILS_ENV=test rake db:migrate
trabalhou para mim.Respostas:
Em primeiro lugar, você deve desanexar todas as conexões do banco de dados. Por padrão, você usa o ambiente de desenvolvimento . Em seguida, tente redefinir o banco de dados com o seguinte:
Se o truque não ajudar, elimine o banco de dados, recrie-o novamente, migre os dados e, se você tiver sementes, semeie o banco de dados:
ou resumidamente (desde 3.2):
Uma vez que
db:migrate:reset
implica em descartar, crie e migre o banco de dados. Porque o ambiente padrão pararake
é o desenvolvimento , caso você veja a exceção nos testes de especificação, você deve recriar o banco de dados para o ambiente de teste da seguinte maneira:ou apenas carregando o esquema migrado:
Na maioria dos casos, o banco de dados de teste está sendo semeado durante os procedimentos de teste, portanto
db:seed
, a ação da tarefa não precisa ser aprovada. Caso contrário, você deve preparar o banco de dados (isto está obsoleto no Rails 4 ):e então (se for realmente necessário):
Em versões mais recentes do Rails, o erro ActiveRecord :: NoEnvironmentInSchemaError pode ser aumentado, portanto, apenas acrescente as tarefas com um ambiente de banco de dados definido tarefa: db: ambiente: conjunto :
fonte
rake db:test:prepare
faz o trabalho.rake db:reset
. A mágica acontece cara!Eu encontrei este erro, e em minha pesquisa, descobri que uma das razões para usuários de relação de erro indefinível do PG não existe é:
Este é um erro de migração. Você pode ter criado um novo modelo com alguns atributos de banco de dados. Depois de criar o modelo, você deve migrar os atributos para o esquema do aplicativo Rails.
Se você estiver usando uma máquina local, para desenvolvimento, você pode usar o comando
Se você estiver usando heroku
fonte
rake db:migrate
. Obrigado.Seu banco de dados de teste não está pronto para rspec.
Prepare seu banco de dados de teste para rspec para corrigir este erro
Ele descartará, criará e adicionará migrações ao seu banco de dados de teste
Caso a tarefa rake seja abortada com uma mensagem como 'PG :: Error: ERROR: database "[your_db_test]" está sendo acessado por outros usuários execute este
fonte
Eu tive um erro semelhante. A raiz do meu erro foi que eu tinha uma referência a um modelo Rails em meu arquivo factories.rb. Portanto, isso causou um problema de erro de carregamento. A solução era envolver a referência em um bloco ou
{}
atrasar sua execução.Aqui estava o código BROKEN:
E estava errado porque
User
não foi definido quando o factories.rb estava sendo carregado. Enrolei aUser.new
chamada em um bloco e resolveu o problema:Código fixo:
Nota: provavelmente não é uma boa prática precisar chamar seu modelo assim, mas foi uma solução para secar meu código.
fonte
Eu estava recebendo este erro também ao executar rspec:
Foi resolvido para mim depois que corri
fonte
Isso geralmente é causado por um bug no ActiveAdmin. Veja como contornar o bug:
Se você estiver usando ActiveAdmin, qualquer tabela que PG diga não existe, comente o conteúdo desse arquivo ActiveAdmin rb.
Por exemplo, neste caso
PGError: ERROR: relation "users" does not exist
, comente todo o conteúdo de eapp/admin/users.rb
, em seguida, remova o comentário depois de fazer suas migrações.fonte
Esse problema para mim estava sendo causado pelos trilhos Factory Girl. Eu recomendaria para aqueles que o usam renomear a pasta specs / factories para specs / temp e tentar
RAILS_ENV = your_environment bundle exec rake db: migrate --trace
Se passar, você acabou de descobrir o que estava causando isso. Uma rápida pesquisa no repositório github de gem do Factory Girl Rails me ajudou a identificar o problema.
As fábricas estavam falhando porque eu estava tentando instanciar um modelo que não existia durante a execução! Exemplo de código abaixo:
Encapsular a matriz em um bloco (adicionando {}) fez a correção para mim. Observe que payment_options pode ter mais de uma opção de pagamento no exemplo ...
Consulte a parte Atributos dinâmicos da documentação do Factory Girl Rails para obter mais informações.
Não se esqueça de renomear sua pasta de fábricas de volta!
fonte
Eu estava enfrentando o mesmo problema e então descobri a seguinte solução.
Certifique-se de ter inserido todas as seguintes credenciais no arquivo database.yml e de que estejam corretas:
fonte
Tive esse problema depois de excluir a tabela de usuários. as soluções estavam mudando
para
fonte
::Migration[5.0]
estava faltando nas migrações. em vez de lançar um erro de sintaxe, ele lançadepois de perder horas, finalmente descobri que a migração está faltando
::Migration[5.0]
.Migração errônea:
Migração Fixa e Correta
Isso pode ser um bug com trilhos e pode ajudar alguém, ao invés de lutar e se perguntar.
fonte
Eu estava recebendo um erro semelhante ao tentar executar testes usando rspec.
Eu segui os passos de Малъ Скрылевъ, mas ainda assim terminei. A etapa final que precisei fazer foi carregar meu esquema em meu banco de dados de teste usando:
RAILS_ENV=test rake db:schema:load
Depois disso, o problema foi embora e eu pude passar para o próximo bug. Espero que isso lhe dê algumas dicas.
fonte
Remova a pasta Admin e execute o rake novamente.
fonte
(Eu sei que isso é antigo, mas para futuros googlers)
Você está usando
devise
? Eu sei que especificamenteomniauthable
é um problema, mas talvez outros também. Não tem que serdevise
embora. Genericamente, a solução é comentar o modelo ofensivo, a classe, o que for, e descomentar quaisquer seções solicitadas pelos erros.Para mim, o que estava acontecendo é que
devise
ler oUser
modelo para ver o que você tem como argumentos paradevise
(o método de classe ou sejadevise :database_authenticatable, :registerable #etc
)Mas, ele irá ler todo o arquivo e se este não for um projeto novo, ele pode ser confundido por outros métodos de classe que dependem de outras coisas (no meu caso era a
friendly_id
gema, e então umalias_method
A resposta foi comentar o
User
modelo, exceto nasdevise
linhas * erake db:schema:load
deve funcionar bem.caso contrário, recebo este erro:
ArgumentError: Mapeando omniauth_callbacks em um recurso que não é omniautável. Adicione
devise :omniauthable
aoUser
modelofonte
Se você receber este erro durante a migração, certifique-se de que o nome do seu modelo esteja no plural
por exemplo.
fonte
A causa mais provável é que seu rake está usando um ambiente diferente do database.yml do seu servidor web.
fonte
Eu tive esse problema e ele acabou sendo causado pela API Grape . Percebi no rastreamento da pilha que o arquivo de rotas estava sendo lido durante a migração.
Em routes.rb, a API Grape é montada
E na API havia referências ao modelo ausente. Então, graças a esta resposta coloquei-o em um bloco que detecta se está sendo executado pelo servidor ou durante a migração.
E funcionou.
fonte
Eu estava tendo o seguinte erro e fazendo uma pesquisa em todo o código do meu aplicativo, pois
type_zones
não consegui encontrar. Também olhei o banco de dados e ele foi atualizado.Acontece que era um arquivo em luminárias
/test/fixtures/type_zones.yml
que estava causando o problema.fonte
Pra quem ainda está com esse problema, no meu caso, era minha fábrica no FactoryGirl que estava provocando esse erro.
Estava tentando adicionar referência via '.new' ou '.create'.
fonte
No meu caso, tive que comentar 2
ActiveAdmin
arquivos. Aqui foram meus passos:Solr
neste projeto):⇒ rkdbm java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode) => Solr is already running rake aborted! PG::UndefinedTable: ERROR: relation "discussions" does not exist LINE 5: WHERE a.attrelid = '"discussions"'::regclass ^ : SELECT a.attname, format_type(a.atttypid, a.atttypmod), pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = '"discussions"'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/app/admin/users.rb:25:in
block in <top (required)>' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/app/admin/users.rb:1:in
' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/routes.rb:3:inblock in <top (required)>' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/routes.rb:1:in
' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/environment.rb:5:in `' Tasks: TOP => db:migrate => environment (See full trace by running task with --trace)Comentei o
app/admin/discussions.rb
arquivo de acordo com a resposta da Arcolye acima e tentei migrar meu banco de dados novamente.Mesmo erro.
Eu olhei para o rastreamento de pilha um pouco mais de perto e percebi que, de fato,
app/admin/users.rb:25
estava lançando a exceção - e com certeza, esse arquivo depende da minhadiscussions
tabela (via execuçãoDiscussion.all
).Finalmente, comentar o conteúdo de
users.rb
me permitiu finalmente migrar meu banco de dados com sucesso.FYI: há uma discussão aqui em
ActiveAdmin
sobre se que gem deve carregar o banco de dados quando necessário.fonte
Então, tendo o mesmo problema agora. Lembre-se de ter apenas um modelo em cada migração. Isso resolveu para mim.
Eu encontrei a resposta aqui.
fonte
Eu estava pegando o erro:
Acabou sendo uma solução super fácil. Copiei os arquivos de uma versão mais antiga do projeto e esqueci de aninhá-los dentro de uma pasta "migrar". Quando fiz isso, resolvi o problema para mim.
fonte
isso geralmente pode acontecer quando você usa o tipo errado de associação entre os modelos, verifique se há dependência de destruição e associações has_many, por exemplo:
maneira errada que pode causar este problema:
article.rb
subcategory.rb
caminho certo:
article.rb
subcategory.rb
fonte