我已经设置了一个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"
答案 0 :(得分:0)
我认为此问题与database.yml
上的用户身份验证有关
因为无论何时转产,您都将应用不同的数据库,并因此应用不同的用户和密码。
更改了database.yml配置后,尝试使用相同的命令,在生产环境中使用与开发中用于测试的相同数据库,然后可以重构为在服务器中相应地运行。