首页 > 解决方案 > 由于 psql 权限,无法在生产环境中执行 rake 任务

问题描述

我已经设置了一个 rake 任务,我想使用 cron 表达式每小时运行一次。我让它在我的开发环境中本地工作,但我无法让它在我的生产环境(托管在 digitalocean)上工作,因为我遇到了 postgres 权限问题。

这是我在 /lib/tasks/cron.rake 中的代码:

  task :cron => :environment do
    puts "starting job"
    Schedule.run_schedules
    puts "finished job"
  end

当我在开发中运行 rake cron 时,它会产生以下输出:

starting job
finished job

当我 ssh 进入我的生产环境并运行以下命令时:

rake cron RAILS_ENV=production

我得到以下输出:

starting job
rake aborted!
ActiveRecord::NoDatabaseError: FATAL:  role "root" does not exist

我想我需要以拥有 psql 的用户身份运行它,所以我运行了以下命令:

su user
rake cron RAILS_ENV=production

但后来我收到这条消息:

rake aborted!
LoadError: cannot load such file -- bundler/setup

跑步

bundler

结果是:

Command 'bundler' not found, but can be installed with:

apt install ruby-bundler
Please ask your administrator.

我尝试通过 sudo apt install ruby​​-bundler 安装捆绑程序,但它告诉我我没有正确的权限。

我完全迷失在这里。任何帮助深表感谢!

编辑:我也试过

psql -U user
psql -U user -w

两者都导致

psql: FATAL:  Peer authentication failed for user "user"

标签: ruby-on-railspostgresqlrakedigital-ocean

解决方案


我认为这个问题与用户身份验证有关,database.yml 因为每当您更改为生产环境时,您都在应用不同的数据库,因此使用不同的用户和密码。

在更改您的 database.yml 配置后尝试相同的命令,在生产中使用与在开发中使用相同的数据库仅用于测试,然后您可以重构以在服务器中相应地运行。


推荐阅读