当我在控制器中进行转储时,其大小为0



我的控制器代码如下:

system("PGUSER=#{ENV["DATABASE_USER"]} PGPASSWORD=#{ENV["DATABASE_PASSWORD"]} pg_dump db_name_#{ENV["RAILS_ENV"]} > /location/db_name_#{@backup.name}.dump")

当我在生产中的rails控制台中运行它时,它的ok和dump是正确的,但当它从创建大小为0 bytes的控制器dump调用时。

这取决于流程的所有者。也许处理控制器请求的进程没有访问目标文件夹的权限,也没有执行pg_dump的权限。还需要审查和比较两种情况下的ENV var值。你确定rails env是一样的吗?

如果您有对服务器的ssh访问权限,您可以找到进程及其所有者。。。使用bash命令ps aux | grep -i passengerps aux | grep -i unicornps aux | grep -i pumacat ./tmp/pids/server.pid(然后您可以通过pid找到流程(

这取决于您的应用程序使用哪个web服务器模块。。。

然后,您需要授予进程所有者对目标文件夹的写访问权限。使用chownchmod

此外,您可以尝试对您的命令使用破解-在system调用中使用带有密码的sudo命令但我强烈不建议在生产中这样做

示例:system("echo 'password' | sudo -S -k #{dump_command}")

我在这里找到了Rails为dump&恢复PostgreSQL数据库

我在控制器中使用了它,并做了一些小改动:

system "RAILS_ENV=production rake db:dump"

最新更新