在 Heroku 上复制 Phoenix 文件
Phoenix file copying on Heroku
我正在尝试将图像上传到我在 Heroku 上的 Phoenix 应用程序。我有一个简单的应用程序,它遵循从 Phoenix's docs.
上传文件的说明
我有一个简单的表单,控制器使用 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 时,在目录上测试表单和 heroku run find
,我什么也没看到。
我注意到 heroku 上的这个目录有一个看似禁止的特权:
drwx------ 2 u25619 dyno 4096 Apr 23 05:14 images
我试过穿上一件漂亮的小衣服 File.chmod("priv/static/images", 0o777)
,但无济于事;该目录似乎被锁定了,所以我认为这是一个 heroku 问题。
知道如何处理吗?
编辑:通过使用 phoenix dep ex_aws
上传到 Amazon S3 存储桶来解决。
- ex_aws dependency
- partial explanation(注意:你需要添加 poison 和 hackney 才能使它起作用,它们没有被提及)
heroku 上的文件系统是临时的,您将无法访问在部署期间或启动新实例时保存在其中的任何文件。
此外,当您 运行 heroku 运行 时,您并没有连接到当前正在 运行 应用程序的同一个实例,而是它将做的是启动一个新实例,这样那些上传的文件就不会存在了。
更好的方法是将上传的文件保存到 S3 或类似的地方,这样您仍然可以跨部署访问它。
我正在尝试将图像上传到我在 Heroku 上的 Phoenix 应用程序。我有一个简单的应用程序,它遵循从 Phoenix's docs.
上传文件的说明我有一个简单的表单,控制器使用 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 时,在目录上测试表单和 heroku run find
,我什么也没看到。
我注意到 heroku 上的这个目录有一个看似禁止的特权:
drwx------ 2 u25619 dyno 4096 Apr 23 05:14 images
我试过穿上一件漂亮的小衣服 File.chmod("priv/static/images", 0o777)
,但无济于事;该目录似乎被锁定了,所以我认为这是一个 heroku 问题。
知道如何处理吗?
编辑:通过使用 phoenix dep ex_aws
上传到 Amazon S3 存储桶来解决。
- ex_aws dependency
- partial explanation(注意:你需要添加 poison 和 hackney 才能使它起作用,它们没有被提及)
heroku 上的文件系统是临时的,您将无法访问在部署期间或启动新实例时保存在其中的任何文件。
此外,当您 运行 heroku 运行 时,您并没有连接到当前正在 运行 应用程序的同一个实例,而是它将做的是启动一个新实例,这样那些上传的文件就不会存在了。
更好的方法是将上传的文件保存到 S3 或类似的地方,这样您仍然可以跨部署访问它。