5 ms·
These frequent posts about Elixir are tempting me to give it another shot... But the last time I tried (weeks ago), it was a total pain. I could barely find do
by sergiomattei 5y ago
These frequent posts about Elixir are tempting me to give it another shot...
But the last time I tried (weeks ago), it was a total pain. I could barely find documentation for the authentication packages I was trying for Phoenix and the docs I did find were usually outdated. Packages were unmaintained left and right and there's no official libraries for things like Stripe.
It was a real shame because I seriously align with the ideology behind it. It just slows me downvand for that reason I can't use it.
- dudul 5y agoWhat auth packages were you trying? Documentation in the Elixir ecosystem is often excellent. The recommended auth library with Phoenix is now phx_gen_auth if it helps. As for Stripe, this looks pretty mature to me https://github.com/code-corps/stripity_stripe https://github.com/code-corps/stripity_stripe Definitely not a lot of "official" libs/clients in Elixir, companies aren't gonna spend a lot of resources maintaining that.
- sergiomattei 5y agoMy experience with phx_gen_auth was like this: 1. Install Phoenix, expect the command to be available because everyone is raving about it. 2. Missing command. 3. Dig through docs. 4. Pull the development branch of Phoenix because phx_gen_auth is only available there. 5. Run the generator within the Phoenix git repo because it won't allow me to run it elsewhere using a development version. 6. Use the generator. 7. Never figure things out because the phx_gen_auth command is barely documented and now I've got files everywhere that I don't understand. I tried implementing API authentication as well and while I got it working, it was less pleasant than my usual Django stack. Another example. The colossal amount of docs referring to a missing Phoenix plugin for Guardian that got removed in a random update made me scratch my head and spend an hour digging through their changelog and commits to figure out why my code wasn't working. The change was not documented at all. All in all, there were roadblocks every step of the way with poor docs and big undocumented breaking changes in libraries like Guardian. I want to love this thing but it made me so unproductive in the first couple weeks of using it for basic web/api development that I simply noped out.
- kfajdsl 5y agoYeah, all the different files in different directories in a Phoenix project is pretty overwhelming. I would recommend going through the official Phoenix guides before messing with some of the generators or libraries, that helped me a lot. Also, if you're interested in it, the Phoenix LiveView guides are also excellent.
- devoutsalsa 5y agoI feel your pain. I personally felt like the learning curve was on Elixir was quite steep, partially because I lacked a strong foundation in software engineering when I started. Fortunately I had the luxury of learning on the job & was given enough time to ramp up. Now I really like it.
- dudul 5y agoDamn, did you try it 6 months ago while it was still experimental? I started like 4 projects in the past 2 months with it and this does not at all mirror my milage. And I like it much better than a library because the code is just plain phoenix/ecto that is can customize easily.
- sergiomattei 5y agoNo, a month ago.
- bostonvaulter2 5y agoYeah, unfortunately there are still some sharp edges. Was there a particular reason you decided to use the unreleased version of Phoenix 1.6 instead of using the current version of phx_gen_auth (from https://github.com/aaronrenner/phx_gen_auth/ https://github.com/aaronrenner/phx_gen_auth/)? There's a decent bit of documentation there too. I haven't used guardian (not a fan of JWT) so I can't comment on it.
- ch4s3 5y agoYeah, phx_gen_auth hasn't landed in main phoenix yet. As another poster mentioned, you should try https://github.com/aaronrenner/phx_gen_auth https://github.com/aaronrenner/phx_gen_auth if you're going to use a generator. You might however get more mileage out of Programming Phoenix[1] where you'd learn what all of the files are for and how to build auth yourself. Plug and Ecto make it quite easy to do password auth. Guardian was popular in the past, but isn't widely used these days. You could use joken, or just roll it yourself. Generally the docs for Elixir libraries are very good, but you have indeed found some poorly documented things. I might suggest scraping together something simple and then trying out parts of the ecosystem that offer something new, like channels, live_view, broadway, or something else that takes advantage of OTP. Otherwise you're only going to see the gaps compared to Django and none of the benefits. [1] https://pragprog.com/titles/phoenix14/programming-phoenix-1-4/ https://pragprog.com/titles/phoenix14/programming-phoenix-1-...
- freedomben 5y agoComing from the Ruby and Node eco-systems I know what you mean, but I've also found it to be not that bad to roll my own depending on the complexity of the service. In some cases I'm finding I like it better that way because it's less "magic." For example, I can open the module anytime and see how the HTTP request is being made to the K8s API. Definitely not for everyone or everything, just thought I'd share the thought.
- pablodavila 5y agoSomeone shared a boilerplate template on the Elixir subreddit the other day, might help out. Can't really recommend anything for Stripe, though. From what I've seen people usually use Stripity Stripe. - https://alex-min.fr/open-sourcing-my-phoenix-boilerplate/ https://alex-min.fr/open-sourcing-my-phoenix-boilerplate/ - https://hex.pm/packages/stripity_stripe https://hex.pm/packages/stripity_stripe
- realusername 5y agoI'm the author of the boilerplate mentioned here if people have any question about it, thanks for sharing! I've had the same struggles personally when building my web app so that's why I backported some my code into this repo, the defaults with Phoenix are great but there's a long way to make it kind of usable for real users.
- remi 5y agoShamless plug for our Elixir boilerplate we’ve been maintaining for three years :) https://github.com/mirego/elixir-boilerplate https://github.com/mirego/elixir-boilerplate
- shijie 5y agoI have had a completely opposite experience during the last 5+ years as full-time Elixir dev, but I can empathize with running into a few scenarios where some library wasn't implemented in Elixir, or the library you want to use is no longer supported. If you're looking for an "every feature I will ever need to implement has a library for it" experience a la Rails or JS, you might not be happy with Elixir (although we shall see what 5 more years does to the ecosystem). I don't have problems wrapping a service's API and creating my own library every once in a while, if it means I don't have to trade off slapping together a 5+ service behemoth just to get a good concurrent queue working. This is where Elixir/OTP shines: the hard stuff is easy.
- spicybright 5y agoCan you elaborate a bit more how the hard stuff is easy?
- syspec 5y agoThe code writes itself!
- pdimitar 5y agoParalellizing data processing is trivial, it's literally 2-5 more lines of code in many scenarios. I've tried -- and failed -- to replicate what Elixir does in this regard, in several other programming languages. Age those tries incurred hundreds of coding lines. Only Rust came close, although it's a bit verbose, but the code still did the job.
- rpastuszak 5y ago> What do you think about Golang's concurrency patterns? I’d like to ask the same question about observables in JS (e.g. RxJS)
- deleted 5y ago[deleted]
- itake 5y ago
- pdimitar 5y agoIt's true that some library coverage is definitely the weak point of Elixir. Authentication in particular is a gaping hole although efforts like `Pow` and `phx.gen.auth` do help to no small extent. The community is excellent though. You'll rarely find such a welcoming and ready-to-help community as ElixirForum (although the occasional exceptions do happen like everywhere else). Elixir is not about the syntax or anything. It's about (a) the underlying runtime, (b) the very powerful metaprogramming facilities and (c) Phoenix / Absinthe / a few others.
- sergiomattei 5y agoAgreed on the community! They have been nothing but supportive on forums and chats. The brightest point of Elixir is their warm and friendly folks.
- gregors 5y agoI haven't tried this yet - but I just recently saw this rolled up version of Phoenix - with a bunch of defaults. https://legendaryframework.org/ https://legendaryframework.org/
- vaer-k 5y agoIn my experience the documentation around Elixir has been ideal. People are modeling the absolute best of behavior, generally. The popular auth libraries (like guardian) are a bit of an exception in my opnion, for some strange reason. (Pow does a good job, though)