【问题标题】:PG::UndefinedTable: ERROR: relation "services" does not exist LINE 1: SELECT "services".* FROM "services"PG::UndefinedTable:错误:关系“服务”不存在第 1 行:选择“服务”。* 从“服务”
【发布时间】:2017-09-25 08:32:17
【问题描述】:

我在使用时遇到了一些问题。我创建了一个 rake 任务,当我自己启动它时它工作得非常好,但是当我尝试自动化它时,每当我在我的日志中收到以下消息时:

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>'

这是命名问题吗?我检查并仔细检查,但我错过了什么吗?

我的环境是发展。

这是我的 schedule.rb:

set :output, {:error => "log/cron_error_log.log", :standard => "log/cron_log.log"}
every 2.minutes do
  rake 'check:all', :environment => 'development'
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

这是我的模型: - 服务.rb

class Service < ApplicationRecord
  has_many :pings, dependent: :destroy
  validates :name, uniqueness: true, presence: true
  validates :web_api, uniqueness: true, presence: true
end
  • ping.rb

    类 Ping

【问题讨论】:

  • 你能添加你的模型@Doge吗?
  • 我假设由when创建的cron作业无法访问同一组gem(?尽管它应该正常失败,然后?)。您可以尝试使用 cron 作业使用的相同 bash 运行 rake 任务吗?
  • @SebastiánPalma 刚刚做了,谢谢
  • @ulferts 我跑了:/bin/bash -l -c 'cd /Users/Naekh/code/yoando/statuschecker/statuschecker && RAILS_ENV=production bundle exec rake check:all --silent >> log/cron_log.log 2>> log/cron_error_log.log' 在我的终端中并得到相同的错误
  • 您确定迁移是在您的开发环境中运行的吗? bundle exec rake db:migrate RAILS_ENV=development 因为您的 cron 工作正在使用开发。你也可以发布rake任务吗?是否使用相同的环境

标签: ruby-on-rails ruby postgresql cron whenever


【解决方案1】:

多亏了你们的cmets,我才发现问题出在哪里。

Cron 正在发送这个:

/bin/bash -l -c 'cd /Users/Naekh/code/yoando/statuschecker/statuschecker && RAILS_ENV=production bundle exec rake check:all --silent >> log/cron_log.log 2>> log/cron_error_log.log'

如您所见,他正在将其发送到生产环境,即使在我的日程安排中:

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

我告诉他把它发送到开发环境。我现在需要想办法强迫他像我跑步时那样进入那个环境:

/bin/bash -l -c 'cd /Users/Naekh/code/yoando/statuschecker/statuschecker && RAILS_ENV=environment bundle exec rake check:all --silent >> log/cron_log.log 2>> log/cron_error_log.log'

有效

我更新了 cronjob 环境:

whenever --update-crontab --set environment='development'

现在运行顺利

【讨论】:

    猜你喜欢
    • 2016-03-18
    • 1970-01-01
    • 2020-05-08
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2021-02-05
    相关资源
    最近更新 更多