繁体   English   中英

Heroku Rake任务未运行Shell脚本

[英]Heroku Rake task not running shell script

我有在本地工作的Rake任务:

namespace :backup_to_s3 do
  task run: :environment do
    puts "Started S3 backup"
    # create .pgpass so we don't have to enter the password
    entry = "#{ENV['RDS_DB_HOSTNAME']}:*:*:#{ENV['RDS_DB_SUPER_USERNAME']}:#{ENV['RDS_DB_SUPER_PASSWORD']}"
    `echo '#{entry}' > ~/.pgpass;
    chmod 0600 ~/.pgpass;
    bash backup_to_s3.sh`
    puts "Finished S3 backup"
  end
end

请注意,它会调用以运行Shell脚本。 这是shell脚本:

#!/bin/bash

backupTime=`date +%Y%m%d-%H:%M`
S3Bucket=$S3_BUCKET_NAME
RDSHostname=$RDS_DB_HOSTNAME
RDSUsername=$RDS_DB_SUPER_USERNAME
RDSDatabaseName=$RDS_DB_NAME

pg_dump -Fc ${RDSDatabaseName} -h ${RDSHostname} -U ${RDSUsername} --no-password | gzip -9 | \
s3cmd put - s3://${S3Bucket}/postgres.${RDSDatabaseName}.dump.${backupTime}.gz

就像我说的那样,这一切都在本地工作,而puts日志语句也可以工作。 在Heroku上,任务运行,但是puts语句立即执行,似乎表明系统调用和shell脚本未在运行。

我很困惑为什么这不起作用!

更新7/15

我发现您可以设置PGPASSWORD环境变量,并避免创建.pgpass文件。 Rake任务仍未执行Shell脚本。

Heroku没有为您提供传统的虚拟专用服务器,因此我不认为您有权写入主目录。 创建.pgpass文件时,很可能会收到拒绝权限的错误。

尝试将文件放置在rails项目的相对tmp/目录中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM