Carrierwave AWS Heroku:current_path和File.read无法找到该文件

时间:2014-05-03 03:40:13

标签: ruby-on-rails ruby heroku carrierwave

我(我认为是)完美的Heroku-Carrierwave-AWS。

我可以像魅力一样上传图片。

我现在需要通过JSON请求将相应的图像发送到应用程序。这一直在我的测试服务器上工作,但出于某种原因,我从我的电话调用我的Heroku日志中获得以下内容:

Started POST "/downloadUserPhotos" for ?? at 2014-05-03 03:27:38 +0000
Errno::ENOENT (No such file or directory @ rb_sysopen - uploads/photo/mainphoto/1/largeimage.jpg):
app/controllers/stats_controller.rb:22:in `read'
app/controllers/stats_controller.rb:22:in `downloadPhotos'

我很确定这与以下Ruby / Rails代码有关:

def downloadPhotos
  @photos = Photo.find_by_user_id(current_user.id)
  @mainphoto = Base64.strict_encode64(File.read(@photos.mainphoto.current_path))
end

当我在Heroku上使用我的控制台并键入以下内容时:

@photos = Photo.find(1)

它有效,我得到了正确的记录。当我要求mainphoto的current_path时,我得到:

irb(main):002:0> @photos.mainphoto.current_path
=> "uploads/photo/mainphoto/1/largeimage.jpg"

所以,它知道它存在。而且它在正确的位置。

任何人都可以启发我(或指出我正确的方向)为什么我不能使用File.read。而且,更重要的是,我现在如何读取图像文件并对其进行编码?

这让我有些困惑。

我尝试使用@ photos.mainphoto.url,但除了给我整个网址外,它仍然无法使用File.read找到该文件。

我的载波配置是:

CarrierWave.configure do |config|
  config.fog_credentials = {

    # Configuration for Amazon S3
    :provider              => 'AWS',
    :aws_access_key_id     => ENV['AWS_ACCESS_KEY_ID'],
    :aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
    :region                => ENV['S3_REGION']
  }

  config.cache_dir = "#{Rails.root}/tmp/uploads"

  config.fog_directory    = ENV['S3_BUCKET_NAME']

end

我的上传器中有以下内容:

def store_dir
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.user.id}"
end

提前致谢。

1 个答案:

答案 0 :(得分:0)

在行中:

$desc= $_GET['desc'];
echo "$desc"; // outputs as "testcolumn"

// SUCCESS when passed as a string

 echo $ssh->exec('mysql -h localhost -u root -pXXXX dbname -e "INSERT INTO test_execution (test_desc) values ( \"testcolumn\" );"');

// ERROR when passed as a parameter

 echo $ssh->exec('mysql -h localhost -u root -pXXXX dbname -e "INSERT INTO test_execution (test_desc) values (\'$desc\');"');

更改@mainphoto = Base64.strict_encode64(File.read(@photos.mainphoto.current_path))

current_path