由于psql权限,无法在生产环境中执行rake任务

时间:2019-06-13 20:26:18

标签: ruby-on-rails postgresql rake digital-ocean

我已经设置了一个rake任务,我想使用cron表达式每小时运行一次。我可以在开发环境中本地运行它,但是由于遇到了postgres许可问题,所以无法在生产环境(托管在digitalocean上)上运行它。

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

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

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

starting job
finished job

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

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"

1 个答案:

答案 0 :(得分:0)

我认为此问题与database.yml上的用户身份验证有关 因为无论何时转产,您都将应用不同的数据库,并因此应用不同的用户和密码。

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