ActiveRecord :: StatementInvalid:PG :: UndefinedTable:错误:关系
我每遇到一些麻烦。我创建了完美运行rake任务,当我启动它自己:ActiveRecord :: StatementInvalid:PG :: UndefinedTable:错误:关系
namespace :check do
desc "check all services"
task :all do
Rake::Task["fb_ping:check"].invoke
Rake::Task["lithium_ping:check"].invoke
Rake::Task["algolia_ping:check"].invoke
end
end
但是当它经过时:
set :output, {:error => "log/cron_error_log.log", :standard => "log/cron_log.log"}
every 2.minutes do
rake 'check:all'
end
我得到了我的日志以下回报:
rake aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "services" does not exist
LINE 1: SELECT "services".* FROM "services"
^
: SELECT "services".* FROM "services"
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `async_exec'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `block in exec_no_cache'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/connection_adapters/abstract_adapter.rb:590:in `block in log'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activesupport-5.0.6/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/connection_adapters/abstract_adapter.rb:583:in `log'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `exec_no_cache'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/connection_adapters/postgresql_adapter.rb:585:in `execute_and_clear'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/connection_adapters/postgresql/database_statements.rb:103:in `exec_query'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/connection_adapters/abstract/database_statements.rb:377:in `select_prepared'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/connection_adapters/abstract/database_statements.rb:39:in `select_all'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/connection_adapters/abstract/query_cache.rb:95:in `select_all'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/querying.rb:39:in `find_by_sql'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/relation.rb:706:in `exec_queries'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/relation.rb:583:in `load'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/relation.rb:260:in `records'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/activerecord-5.0.6/lib/active_record/relation/delegation.rb:38:in `each'
/Users/Naekh/code/yoando/statuschecker/statuschecker/lib/tasks/fb_ping.rake:5:in `block (2 levels) in <top (required)>'
/Users/Naekh/code/yoando/statuschecker/statuschecker/lib/tasks/rake_them_all.rake:4:in `block (2 levels) in <top (required)>'
/Users/Naekh/.rvm/gems/ruby-2.4.1/gems/rake-12.1.0/exe/rake:27:in `<top (required)>'
/Users/Naekh/.rvm/gems/ruby-2.4.1/bin/ruby_executable_hooks:15:in `eval'
/Users/Naekh/.rvm/gems/ruby-2.4.1/bin/ruby_executable_hooks:15:in `<main>'
我不知道如何独立工作的东西可以崩溃时,每当调用
// Here是我的模式:
ActiveRecord::Schema.define(version: 20170922073721) do
enable_extension "plpgsql"
create_table "pings", force: :cascade do |t|
t.boolean "up"
t.integer "service_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["service_id"], name: "index_pings_on_service_id", using: :btree
end
create_table "services", force: :cascade do |t|
t.string "name"
t.string "web_api"
t.string "json_path"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_foreign_key "pings", "services"
end
这里是一个ping检查(fb_ping.rake),我在我的其他测试中使用了相同的语法。当我手动启动所有这些工作:
namespace :fb_ping do
desc "New fb ping"
task check: :environment do
Service.all.each do | s |
if s.name == 'Facebook'
if FacebookStatusService.status === 1
Ping.create(up: true, service: s)
puts 'FB service is up'
else
Ping.create(up: false, service: s)
puts 'FB service is down'
end
end
end
end
末
If a :path is not set it will default to the directory in which whenever was executed. :environment_variable will default to 'RAILS_ENV'. :environment will default to 'production'. https://github.com/javan/whenever
动态调整的环境中,你需要通过在飞行中的变量。 https://github.com/javan/whenever/wiki/Setting-variables-on-the-fly
作为第一个测试,尝试硬编码当前的环境下,我假设在下面的例子中发展:
set :output, {:error => "log/cron_error_log.log", :standard => "log/cron_log.log"}
every 2.minutes do
rake 'check:all', :environment => 'development'
end
更新我的文章我刚刚尝试过,并且在我的错误日志中有相同的消息。我运行一个检查,看看我是不是在测试中而不是在控制台(Rails.env)中进行开发,并且我正在开发 – Doge
如果这看起来很愚蠢,我很抱歉,但是您是否尝试过重新启动您的rails控制台? – AytanLeibowitz
是的,我做了:) 这并不愚蠢。我很感激帮助 – Doge
这有可能是耙invoke方法试图使用您的测试环境。 https://stackoverflow.com/questions/36125355/custom-rake-task-for-db-table-not-found – AytanLeibowitz
你可以发布'db/schema.rb'的内容吗? – garythegoat
@garythegoat我更新了我的帖子(感谢您的帮助) – Doge