在Heroku上复制Phoenix文件

在Heroku上复制Phoenix文件,heroku,elixir,file-permissions,phoenix-framework,chmod,Heroku,Elixir,File Permissions,Phoenix Framework,Chmod,我正在尝试将图像上传到Heroku上的Phoenix应用程序。我有一个简单的应用程序,它遵循从中上传文件的说明 我有一个简单的表单,控制器使用File.cp\r()从临时目录复制文件 def create(conn, %{"user" => user_params}) do if upload = user_params["photo"] do File.cp_r(upload.path, "priv/static/images/foo.jpg") #non-dyn

我正在尝试将图像上传到Heroku上的Phoenix应用程序。我有一个简单的应用程序,它遵循从中上传文件的说明

我有一个简单的表单,控制器使用
File.cp\r()
从临时目录复制文件

  def create(conn, %{"user" => user_params}) do
    if upload = user_params["photo"] do
      File.cp_r(upload.path, "priv/static/images/foo.jpg") #non-dynamic name, doens't matter
    end
    ...
  end
在我的本地文件上工作。但是,当我将其上传到Heroku,测试表单并在目录上运行find时,我什么也看不到

我注意到heroku上的这个目录似乎有一个令人生畏的特权:

drwx------2 u25619 dyno 4096 Apr 23 05:14图像

我试着插入一个漂亮的
文件.chmod(“priv/static/images”,0o777)
,但没有用;那个目录似乎离我很远,所以我认为这是一个heroku问题

你知道怎么处理吗

编辑:通过使用phoenix dep
ex_aws
上传到Amazon S3存储桶来解决

  • (注意:您需要添加毒药和黑钱才能使其生效,未提及)

heroku上的文件系统是短暂的,您将无法访问跨部署或启动新实例时保存在其上的任何文件

此外,当您运行heroku run时,您并没有连接到当前正在运行您的应用程序的同一个实例,相反,它将启动一个新实例,这样上载的文件就不存在了


更好的方法是将上传的文件保存到S3或类似版本中,这样您仍然可以跨部署访问它。

尝试
File.cp\r
将抛出一个错误,您可以在日志中读取该错误的原因。(如果需要,与
File.chmod!
相同。)如果您在进行更改后发布详细日志,我们可能会提供更多帮助。您也可以只执行
IO.inspect(File.cp\u r(…)
来记录该函数的返回值。@Dogbert
File.cp\r
没有显示任何内容,
IO.inspect(File.cp_r(…)
显示
{:ok,[“priv/static/images/foo.jpg”]}
,仍然没有显示任何内容。您能否确认此操作没有返回任何内容:
heroku run find.|grep'priv/static/images/foo.jpg'
?@Dogbert确认。正如下面提到的Navin Peiris,它显示了一个完全不同的实例。我的实例也没有显示该文件,因此如果该文件存储在另一个实例中,我就不会看到它……这一点毫无意义,因为我现在使用S3。事实上,
heroku run
直接启动另一个实例是非常关键的。我甚至没有注意到这一点,浪费了很多时间想知道为什么Phoenix没有报告任何错误,但该文件没有出现在我的
heroku run bash
中。。。