Nao*_*i K 88 database ruby-on-rails oauth-2.0 rake-task ruby-on-rails-3
我之前看到过这个问题,但仅限于rspec.我还没有进行测试,因为它对我来说太进步了,但有一天我会尽快!:P
当我尝试使用我的应用注册/登录时出现此错误.我不知道在哪里修理它.我使用devise来创建我的用户,并使用omniauth2来登录谷歌.
这是错误
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
Run Code Online (Sandbox Code Playgroud)
我试过rake db:migrate,但它已经创建,在架构表中存在用户.有没有人以前得到这个错误?
database.yml的
# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
# gem install pg
# Choose the win32 build.
# Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
development:
adapter: postgresql
encoding: unicode
database: tt_intraweb_development
pool: 5
username: my_username
password:
# Connect on a TCP socket. Omitted by default since the client uses a
# domain socket that doesn't need configuration. Windows does not have
# domain sockets, so uncomment these lines.
#host: localhost
#port: 5432
# Schema search path. The server defaults to $user,public
#schema_search_path: myapp,sharedapp,public
# Minimum log levels, in increasing order:
# debug5, debug4, debug3, debug2, debug1,
# log, notice, warning, error, fatal, and panic
# The server defaults to notice.
#min_messages: warning
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
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:
Run Code Online (Sandbox Code Playgroud)
谢谢!
Мал*_*евъ 111
首先,您应该从数据库中分离所有连接.默认情况下,您使用开发环境.然后尝试使用以下内容重置数据库:
rake db:reset
Run Code Online (Sandbox Code Playgroud)
rake db:reset任务将删除数据库并重新设置它.这在功能上等同于rake db:drop db:setup.
这与运行所有迁移不同.它只会使用当前schema.rb文件的内容.如果无法回滚迁移,则rake db:reset可能对您没有帮助.要了解有关转储模式的更多信息,请参阅Schema Dumping和You部分.Rails文档
如果技巧无效,请删除数据库,然后重新创建数据库,迁移数据,如果有种子,则播种数据库:
rake db:drop db:create db:migrate db:seed
Run Code Online (Sandbox Code Playgroud)
或者简短的方式(从3.2开始):
rake db:migrate:reset db:seed
Run Code Online (Sandbox Code Playgroud)
由于db:migrate:reset暗示删除,创建和迁移数据库.因为默认环境rake是开发,如果您在规范测试中看到异常,您应该为测试环境重新创建db,如下所示:
RAILS_ENV=test rake db:drop db:create db:migrate
Run Code Online (Sandbox Code Playgroud)
或者只是加载迁移的方案:
RAILS_ENV=test rake db:drop db:create db:schema:load
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,测试数据库在测试过程中被播种,因此db:seed不需要传递任务操作.否则,您应该准备数据库(这在Rails 4中已弃用):
rake db:test:prepare
Run Code Online (Sandbox Code Playgroud)
然后(如果实际需要):
RAILS_ENV=test rake db:seed
Run Code Online (Sandbox Code Playgroud)
在较新版本的Rails上,可能会出现ActiveRecord :: NoEnvironmentInSchemaError错误,因此只需在数据库环境集任务前面添加任务:db:environment:set:
RAILS_ENV=test rake db:environment:set db:drop db:create db:migrate
Run Code Online (Sandbox Code Playgroud)
Ser*_*kyy 14
您的测试数据库尚未准备好进行rspec.
为rspec准备测试数据库以修复此错误
RAILS_ENV=test rake test:prepare
Run Code Online (Sandbox Code Playgroud)
它将删除,创建并向您的测试数据库添加迁移
如果rake任务被中止,并且消息如'PG ::错误:错误:数据库'[your_db_test]"正被其他用户访问'执行这个
RAILS_ENV=test rake db:migrate
Run Code Online (Sandbox Code Playgroud)
sup*_*289 14
我遇到这个错误并且在我的研究中,PG不可定义错误关系的原因之一是用户不存在错误.
此错误是迁移错误.您可能已创建具有某些数据库属性的新模型.创建模型后,您必须将属性迁移到rails应用程序架构.
如果您使用本地计算机进行开发,则可以使用命令
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
如果你正在使用heroku
heroku run rake db:migrate
Run Code Online (Sandbox Code Playgroud)
小智 12
我有类似的错误.我的错误的根源是我在factories.rb文件中引用了Rails模型.因此它导致了加载错误问题.修复是将引用包装在一个块中,或者{}它延迟运行它.
这是BROKEN代码:
FactoryGirl.define do
factory :user do
guid User.new.send(:new_token)
end
end
Run Code Online (Sandbox Code Playgroud)
这是错误的,因为User在加载factories.rb时没有定义.我将User.new调用包裹在一个块中,它解决了这个问题:
固定代码:
FactoryGirl.define do
factory :user do
guid { User.new.send(:new_token) }
end
end
Run Code Online (Sandbox Code Playgroud)
注意:可能不是最佳做法,需要像这样调用您的模型,但这是一个干扰我的代码的解决方案.
Arc*_*lye 11
这通常是由ActiveAdmin中的错误引起的.以下是解决这个问题的方法:
如果您使用的是ActiveAdmin,那么PG所说的表不存在,请注释掉该ActiveAdmin rb文件的内容.
例如,对于这种情况PGError: ERROR: relation "users" does not exist,请注释掉整个内容app/admin/users.rb,然后在完成迁移后取消注释.
ced*_*dlb 11
运行rspec时我也遇到了这个错误:
Failure/Error: it { expect(subject.priority_list).to eq [nil] * 9 }
ActiveRecord::StatementInvalid:
PG::UndefinedTable: ERROR: relation "priorities" does not exist
LINE 5: WHERE a.attrelid = '"priorities"'::regclass
...
Run Code Online (Sandbox Code Playgroud)
跑完之后我就解决了
rake db:test:prepare
rake db:test:load
Run Code Online (Sandbox Code Playgroud)
对我来说这个问题是由Factory Girl导致的.我建议使用它的人将specs/factories文件夹重命名为specs/temp并尝试
RAILS_ENV = your_environment bundle exec rake db:migrate --trace
如果它通过,那么你只是找到了导致它的原因.快速浏览Factory Girl Rails gem github repo帮助我找出问题所在.
工厂失败了,因为我试图实例化一个在运行时不存在的模型!代码示例如下:
FactoryGirl.define do
factory :billing_product, class: 'Billing::Product' do
name Faker::Cat.name
product_type 'fuel'
active true
payment_options [Billing::PaymentOption.new(term: 1, payment_term: 1)]
end
end
Run Code Online (Sandbox Code Playgroud)
将数组封装在一个块中(添加{})为我做了修复.请注意,payment_options可以在示例中使用多个付款选项...
payment_options {[Billing::PaymentOption.new(term: 1, payment_term: 1)]}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅Factory Girl Rails文档的动态属性部分.
不要忘记重命名您的工厂文件夹!
| 归档时间: |
|
| 查看次数: |
77774 次 |
| 最近记录: |