ruby-on-rails - 由于 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"
解决方案
我认为这个问题与用户身份验证有关,database.yml
因为每当您更改为生产环境时,您都在应用不同的数据库,因此使用不同的用户和密码。
在更改您的 database.yml 配置后尝试相同的命令,在生产中使用与在开发中使用相同的数据库仅用于测试,然后您可以重构以在服务器中相应地运行。
推荐阅读
- javascript - 如何在时间间隔后渲染新的随机上下文?
- haskell - 在haskell中导出Applicative
- python - 标准的动态滚动期。不使用循环的偏差?
- ios - 处理从视图控制器到另一个视图控制器的滚动视图委托 - Swift 5
- google-sheets - 谷歌表格,根据相对排名返回一个文本值
- javascript - 从 odoo 的 pdf_viewer 小部件中删除下载按钮
- sql - 我可以使用文本框引用来选择 MS Access 中的特定记录吗
- java - 菜单项的标题未显示
- c++ - 如何获取QSplitter的初始状态
- python - python选择资源管理器文件