Issues with atoms.
MartinElvar opened this issue · 8 comments
When i try to print the url for my model using the url function like this.
<%= Mobil.Logo.url({company.logo, company}, :thumb) %>
I get the following error
** (exit) an exception was raised:
** (FunctionClauseError) no function clause matching in IO.chardata_to_string/1
(elixir) lib/io.ex:330: IO.chardata_to_string(:thumb)
(elixir) lib/path.ex:474: Path.do_join/3
(elixir) lib/path.ex:469: Path.join/2
(mobil) web/uploaders/logo.ex:3: Mobil.Logo.url/3
(mobil) web/templates/admin/company/index.html.eex:24: anonymous fn/3 in Mobil.Admin.CompanyView.index.html/1
(elixir) lib/enum.ex:1261: Enum."-reduce/3-lists^foldl/2-0-"/3
(mobil) web/templates/admin/company/index.html.eex:22: Mobil.Admin.CompanyView."index.html"/1
(phoenix) lib/phoenix/view.ex:197: Phoenix.View.render_within/3
But if instead uses a string, like this
<%= Mobil.Logo.url({company.logo, company}, "thumb") %>
Then there is no problems.
This is also a problem when uploading images, where i had add to cast the file name to a string, as i got the somewhat same error without it.
lib/arc/actions/storage/local.ex, line: 9
{:ok, _} = File.copy(file.path, Path.join(destination_dir, file_name |> Atom.to_string))
This could be a Arc issue, however i'm using it with the arc_ecto module :-)
My stack
%{"arc": {:hex, :arc, "0.1.1"},
"arc_ecto": {:hex, :arc_ecto, "0.1.2"},
"comeonin": {:hex, :comeonin, "1.1.2"},
"cowboy": {:hex, :cowboy, "1.0.2"},
"cowlib": {:hex, :cowlib, "1.0.1"},
"decimal": {:hex, :decimal, "1.1.0"},
"ecto": {:hex, :ecto, "1.0.2"},
"erlcloud": {:hex, :erlcloud, "0.9.2"},
"fs": {:hex, :fs, "0.9.2"},
"jsx": {:hex, :jsx, "2.1.1"},
"lhttpc": {:hex, :lhttpc, "1.3.0"},
"meck": {:hex, :meck, "0.8.3"},
"phoenix": {:hex, :phoenix, "1.0.2"},
"phoenix_ecto": {:hex, :phoenix_ecto, "1.2.0"},
"phoenix_html": {:hex, :phoenix_html, "2.2.0"},
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.0.0"},
"plug": {:hex, :plug, "1.0.0"},
"poison": {:hex, :poison, "1.5.0"},
"poolboy": {:hex, :poolboy, "1.5.1"},
"postgrex": {:hex, :postgrex, "0.9.1"},
"ranch": {:hex, :ranch, "1.1.0"}}
Would love to help, but my macro skills are not present yet :/
Can you show me the contents of your uploader definition (web/uploaders/logo.ex
) please?
Hi Stavro,
Thank you for your quick response, here is my uploader.
defmodule Mobil.Logo do
use Arc.Definition
use Arc.Ecto.Definition
# To add a thumbnail version:
@versions [:original, :thumb]
# Whitelist file extensions:
def validate({file, _}) do
~w(.jpg .jpeg .gif .png) |> Enum.member?(Path.extname(file.file_name))
end
# Define a thumbnail transformation:
def transform(:thumb, _) do
{:convert, "-strip -thumbnail 250x250^ -gravity center -extent 250x250 -format png"}
end
def __storage, do: Arc.Storage.Local
# Override the persisted filenames:
def filename(version, _) do
version
end
# Override the storage directory:
def storage_dir(version, {file, scope}) do
"uploads/company/logo/#{scope.id}"
end
# Provide a default URL if there hasn't been a file uploaded
# def default_url(version) do
# "/images/avatars/default_#{version}.png"
# end
end
Thank you - I do believe this is a bug in arc
and will look into it shortly
@MartinElvar Can you upgrade arc (not arc_ecto) to v0.1.2 and try again?
@stavro That seemed to do the trick, thx for the quick support :-)
@MartinElvar Of course! Can you please do me a favor and explain to me a little bit about your workflow with local filestorage?
- Where are you hosting
- How you are using the local paths after storing the attachment logo
- What application server (Phoenix, Plug, cowboy, etc)
I'm trying to understand the audience a little more so I can add the right features.
Thanks!
@stavro I would love to help out :-). Let me get back to you tomorrow, it's getting kind of late, here at the other site of the planet 👻!
Hallo @stavro,
As promised a summary of my setup, however keep in mind, that my project is not yet complete; i also discovered some things which makes arc_ecto a bit of a challenge to implement with phoenix, however i will create some dedicated issues for those as i go a long. (These are not necessarily bugs, but things that could improve the experience).
"Where are you hosting"
- The plan is to host all images locally, on a virtual machine, on a digitalocean cloud like machine.
"How you are using the local paths after storing the attachment logo"
- Basically i got a ecto model named "Company", and each company is presented with a logo. I've created a administration panel for my site, where i can upload the logo's for each company.
"What application server (Phoenix, Plug, cowboy, etc)"
- Yes, Cowboy, Plug, Phoenix, Ecto.
Let me know, if you got any further questions 😃