【发布时间】:2016-11-17 15:24:17
【问题描述】:
我有这个在本地工作的 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 脚本。
【问题讨论】:
标签: ruby-on-rails ruby shell heroku rake