2017-09-24 1 views
0

いつも問題があります。私はそれを自分自身を起動したときに完璧に動作rakeタスク作成:ActiveRecord :: StatementInvalid:PG :: UndefinedTable:ERROR:relation

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 

を、それが通過する時にいつでも:

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>' 
:私は私のログに次のリターンを得る

set :output, {:error => "log/cron_error_log.log", :standard => "log/cron_log.log"} 
every 2.minutes do 
    rake 'check:all' 
end 

私は独立して動作するものがいつでも呼び出されるとクラッシュする可能性がありません

//ここに私のスキーマです:ここ

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 

エンド

+0

それはすくいinvokeメソッドがあなたのテスト環境を使用しようとしている可能性があります。 https://stackoverflow.com/questions/36125355/custom-rake-task-for-db-table-not-found – AytanLeibowitz

+0

'db/schema.rb'の内容を投稿できますか? – garythegoat

+0

@garythegoat – Doge

答えて

0

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 
+0

で更新しようとしましたが、エラーログに同じメッセージが表示されました。私はコンソール(Rails.env)での開発ではなく、テストではなかったかどうかを確認するために実行します。 – Doge

+0

これがばかげているとお詫びしますが、レールコンソールを再起動してみましたか? – AytanLeibowitz

+0

はい私はした:) それはまったくばかではありません。私は助けに感謝します – Doge

関連する問題