Closed ospaarmann closed 7 years ago
I uploaded the phoenix app. You can clone it from here: https://github.com/ospaarmann/arc_bugfix This should help to easily reproduce the problem.
Additionally when I try to create a record with an avatar the scope (record) in the Avatar.storage_dir/2
function is nil. Not the id, but the scope itself. Which is super strange:
iex(5)> changeset = User.changeset(%User{}, %{name: "Klaus", avatar: remote_path})
** (EXIT from #PID<0.391.0>) an exception was raised:
** (UndefinedFunctionError) function nil.name/0 is undefined or private
nil.name()
(image) web/uploaders/avatar.ex:52: Image.Avatar.storage_dir/2
lib/arc/storage/s3.ex:6: Arc.Storage.S3.put/3
(elixir) lib/task/supervised.ex:85: Task.Supervised.do_apply/2
(elixir) lib/task/supervised.ex:36: Task.Supervised.reply/5
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Interactive Elixir (1.4.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> [error] Task #PID<0.404.0> started from #PID<0.391.0> terminating
** (UndefinedFunctionError) function nil.name/0 is undefined (module nil is not available)
nil.name()
(image) web/uploaders/avatar.ex:52: Image.Avatar.storage_dir/2
lib/arc/storage/s3.ex:6: Arc.Storage.S3.put/3
(elixir) lib/task/supervised.ex:85: Task.Supervised.do_apply/2
(elixir) lib/task/supervised.ex:36: Task.Supervised.reply/5
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Function: #Function<0.124346436/0 in Arc.Actions.Store.async_put_version/3>
Args: []
So I seem to have fixed it. It was a bug on my side. But it would be great if arc would produce better error messages. If I have time I'll submit a PR.
In the beginning I forgot the sweet_xml
dependency. But arc
didn't complain about that. This lead to an error where a src
attribute wasn't found in the response by AWS (this is more an arc
than an arc_ecto
issue though). That means sweet_xml
should be in the arc
dependencies.
Next the empty changeset. This was stupidity on my side. It only appeared after upgrading and was because I was missing the allow_paths: true
option. The correct changeset for using local or remote paths is
cast_attachments(params, ~w(avatar), allow_paths: true)
Then we had the strange Task.await
timeout which lead to the process crashing and in turn the model being nil
in the storage_dir/2
. This was caused by the transform functions. Apparantly the string that I pass into ImageMagick started to produce an error.
The old transform function:
def transform(:medium, _) do
{:convert, "-strip -thumbnail 600x600^ -gravity center -extent 600x600 -quality 85% -format png", :png}
end
The new, now working, transform function:
def transform(:medium, _) do
{:convert, "-strip -thumbnail 600x600^ -gravity center -extent 600x600 -format png", :png}
end
Again this was a mistake on my side but it would be nice to get more informative error messages.
Hey,
I'm using arc 0.8.0 and arc_ecto 0.7.0. I am encountering a really strange behavior. At some point uploading local files was broken (with a previous version of arc). I decided to upgrade in a hope to fix the issue. I now ran into a different problem: When I pass a path to a local file, a remote file or an Upload Plug into the changeset no changes are being tracked. And it is driving me insane for hours.
I created a new Phoenix app to more easily identify the problem. I can upload the code if that helps.
This is how I try to store an image (for an existing user with the ID 1).
The resulting changeset looks like this:
No changes are tracked. When I on the other hand (with the same setup) upload it without the changeset the file is persisted at S3. So at least the config seems to be correct:
Avatar.store({remote_path, user})
mix.exs
dev.exs
/web/uploaders/avatar.exs
/web/models/user.exs