在Heroku上复制Phoenix文件
我正在尝试将图像上传到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
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 depex_aws
上传到Amazon S3存储桶来解决
- (注意:您需要添加毒药和黑钱才能使其生效,未提及)
更好的方法是将上传的文件保存到S3或类似版本中,这样您仍然可以跨部署访问它。尝试
File.cp\r
将抛出一个错误,您可以在日志中读取该错误的原因。(如果需要,与File.chmod!
相同。)如果您在进行更改后发布详细日志,我们可能会提供更多帮助。您也可以只执行IO.inspect(File.cp\u r(…)
来记录该函数的返回值。@DogbertFile.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
中。。。