The Sad State Of (Atwood's) Web App Deployment


  • I survived the hour long Uno hand

    @ashkante said:

    His beef was mostly with how poorly documented these things can be and how little thought developers have given to anyone outside of the narrow "easy guide".

    "Hi, McDonald's Franchisee Support? I'm having a horrible time making these Big Macs, it takes way longer than the documentation says it should. Well, no, I'm not using the grill cookers you recommended, my customers prefer their meat cooked with George Foreman cookers. And no, I'm not ordering from the official supply catalog, we use Free Range Soy Substitute to make our burgers. What? Big Mac sauce from a tube? Surely you jest!"

    <Honestly, no idea where "supply change" come from there.



  • @boomzilla said:

    Also, Coke in the drinking fountains.

    It's got electrolytes!


  • ♿ (Parody)

    @Maciejasjmj said:

    So, having an application that has "being open source" as one of its major selling points, but actually attempting to install it from source meets with a "shrug well gee, we dunno either, use the damn docker or we don't give a fuck" doesn't strike you as absolutely fucking retarded?

    No more than if they chose some particular build system (assuming something other than ruby) like cmake vs make or ant vs maven or whatever. I don't understand what about this strikes you as "retarded."


  • I survived the hour long Uno hand

    This is what I had to do to get the docker running:

    This is their recommended non-docker install (for "developers"):


  • area_deu

    @Weng said:

    See, you'd think Discourse would try to prevent this kind of thing.

    That feature is an optional extra called J.E.F.F. Paying customers only.



  • @TwelveBaud said:

    ```
    C:\Users\dev_07>npm -v
    1.4.28

    C:\Users\dev_07>node -v
    v0.10.33

    <abbr title="Works On My (out of date) Machine">WOMM</abbr></blockquote>
    
    Yes, I didn't have them installed [on purpose]. I was alluding to the fact that documentation made no mention of these prerequisites whatsoever. The sysadmin is supposed to *just know*.
    
    <blockquote>... because HTTP.SYS has more holes than a freshly manufactured LED.</blockquote>
    I don't know, I've seen some pretty *porous* LEDs :wink:

  • ♿ (Parody)

    @ashkante said:

    Personally, I think he has the expertise required to make it run (or so it seems), so I don't mind that he tried doing that. His beef was mostly with how poorly documented these things can be and how little thought developers have given to anyone outside of the narrow "easy guide".

    Probably also worth noting that they really want people to pay them for setting all this stuff up.


  • ♿ (Parody)

    @Weng said:

    On Linux (and crummy Linux ports) we make it hard for users and administrators.

    I'm sure this is true for certain values of crummy Linux ports. But really, on reasonable distros, it's dead simple if you are able to stay within the package manager. And it's not really that hard to bundle specific libraries with your stuff. As the author alluded, a little starter script with LD_LIBRARY_PATH to call your executable will do it.


  • Garbage Person

    I wonder what forum software this guy is talking about.

    He must just be an old codger like me, or something.



  • @Polygeekery said:

    We are having a discussion about shit being impossible to install, and you casually throw Gentoo in to the conversation?

    Eh, once you've installed it a few dozen times, it hardly ever has new surprises any more...

    <tag 🚎 <tag But alas yes, I do use Gentoo.


  • Garbage Person

    All the distro package managers have done for the problem is to create a whole new class of person who has to get everything to build nicely with every version of everything. Which is a fucking pathological solution. Distro-level repositories aren't magic. They're a fuckload of work. That's why repository versions are often so far behind.

    Imagine this hypothetical scenario:
    I install Windows 10. Only software that has been specifically built and vetted for this particular patchlevel of Windows 10 can be installed without becoming an unsupported configuration.

    Windows updates to fix a thing with some core library.
    Microsoft has conveniently rebuilt every single piece of software I am running.
    Windows Update automatically updates every single app.

    Vendor fixes a critical security bug in an app.
    Takes three months for it to show up in Windows Update.

    Unthinkably horrific, no? That's exactly what Linux distributions have fooled their users into thinking is the best thing since sliced bread because it's powered by volunteers (and Corporate drones pretending to be volunteers) instead of a big scary corporation.


  • ♿ (Parody)

    @Weng said:

    Vendor fixes a critical security bug in an app.Takes three months for it to show up in Windows Update.

    Unthinkably horrific, no? That's exactly what Linux distributions have fooled their users into thinking is the best thing since sliced bread because it's powered by volunteers (and Corporate drones pretending to be volunteers) instead of a big scary corporation.

    Yeah, if only something would eventually show up in Windows Update. OK, I guess the Windows store is getting there. I have several vendor apt repositories on my machine. So as soon as they push out an update, my normal update process (which checks for stuff daily) gets it. It's true that it often takes an extra day or two for something like a Firefox critical patch to work its way through the system. That's not optimal, but it's nothing like 3 months.

    @Weng said:

    Distro-level repositories aren't magic. They're a fuckload of work.

    Yes, like any solution is going to be. And I'm quite grateful that people have put in all the work.


  • Grade A Premium Asshole



  • Add the concept of having to be root to install simple apps. Packages should be installed unzipping something in a directory, not spreading files in the entire OS, and this registry/etc clusterfuck.

    I didnt test gobolinux, is it any better?


  • Trolleybus Mechanic

    @ashkante said:

    Yep, stuff like this is basically why I mentally add a '1' in front of any claim about "X minute installation". Seems like I'll have to up that to a '2' soon.

    That's fine, as long as you're numbering in Hexidecimal.


  • Grade A Premium Asshole

    @fbmac said:

    gobolinux

    TIL, the world has another Linux distro.


  • I survived the hour long Uno hand

    Someone should point the OP at the state of Discourse translation support. Might make for a good rant...

    https://meta.discourse.org/t/italian-translators-please-read/19556/48



  • Gobolinux has a very different packaging system, but I didn't try it myself:

    GoboLinux is an alternative Linux distribution which redefines the entire filesystem hierarchy. In GoboLinux you don't need a package database because the filesystem is the database: each program resides in its own directory, such as /Programs/Xorg-Lib/7.4 and /Programs/KDE-Libs/4.2.0. Like it? [Learn more...](http://www.gobolinux.org/?page=at_a_glance)


  • So it's more like Mac. Probably a better idea, but that system also ends up creating garbage all over the place.



  • VMs and containers had to be invented because OSes couldn't get their shit together.


  • Discourse touched me in a no-no place

    @izzion said:

    Someone should point the OP at the state of Discourse translation support. Might make for a good rant...

    That's the stuff that doesn't get Jeffed so rapidly because he can't read it?



  • @JBert said:

    While the article is right in a lot of ways that this installation is way too complicated, I do feel like the author went to a whole lot of trouble to get it installed on a special snowflake of a system

    Ruby worked on it, Nginx did, so did Postgres. How was it "special snowflake?" All the stuff Discourse needed was there.



  • @Onyx said:

    Noes, I cannot mess with system startup as regular Joe!

    Wait, wut?

    Ignore what current OSes do and think about this:

    If Discourse/Nginx runs under a service account (or whatever Linux calls those), and that service account says "hey I need X, Y, Z on startup", why should this require root? It shouldn't. You're not messing with "system startup", you're messing with Discourse startup, and Discourse already runs in its own user account.

    @Onyx said:

    Hold on, hard to type from the floor, especially when rolling.

    God; am I going to have to explain the word "should" again?



  • @cartman82 said:

    So, rails doesn't know how to handle his special snowflake customized environment.

    Why the fuck does Ruby care if the OS is 32 or 64 bit? This is an OBVIOUS bug you're just glossing over.

    The computer had everything Discourse needed already installed. It wasn't a "special snowflake".

    And let's say for a minute it was-- so fucking WHAT? Unless he did something that was in violation of the OS contract, everything should still work fine "special snowflake" or not. This is like when people were blaming me for my "weird" Windows configuration when everything that was done to my Windows install followed the OS contract to the letter.

    (Of course part of the problem here is that Linux is so shitty, even common configurations don't fucking work right. That doesn't make it right that uncommon configurations are broken, though, that just makes Linux a really shitty OS.)

    @cartman82 said:

    More examples of: "I'll just half-ass it, fuck it" .... (5 minutes later) ... "WHY DOESN'T IT WORK, DISCOURSE SUUUUCKS!!!"

    If Discourse requires Sidekiq, why doesn't it install it itself? Or at least detect if it's running? That's a perfectly valid argument.

    @cartman82 said:

    ALL OF WHICH WOULD HAVE BEEN FINE IF YOU WENT WITH THE DOCKER SETUP, AS YOU SHOULD HAVE

    Running a command over CURL as root is "fine"? Seriously?



  • @flabdablet said:

    In an age of movie files measured in gigabytes and storage sold by the terabyte, I do occasionally wonder whether shared dynamic libraries are a concept well past its use-by date.

    Disk space savings is one part of the equation. That is probably obsolete.

    Security updates are the other.

    With Go, since everything's compiled into one big blob, you have to recompile EVERY Go program from scratch if ANY library they use has a patch. That's fucking stupid, and virtually guarantees Go programs will be full of exploits after a few years.

    Not to mention the virtual impossibility of even just auditing which Go programs have the bad code embedded in them-- you can't just take a MD5 hash of the .dll files and see if they match the known-bad versions. You're just fucked.


  • BINNED

    @blakeyrat said:

    If Discourse/Nginx runs under a service account (or whatever Linux calls those), and that service account says "hey I need X, Y, Z on startup", why should this require root? It shouldn't. You're not messing with "system startup", you're messing with Discourse startup, and Discourse already runs in its own user account.

    You only need root to set it up to autorun. Once. When you're setting it up. Once it's set up there is no need to run anything as root any more. I count this as sensible on any current or future OS. And that was the specific complaint he raised - the need to do stuff as root to set up a system-wide autorun.

    @blakeyrat said:

    God; am I going to have to explain the word "should" again?

    Nope. It's that bitter kind of laughter. You know, the kind that's not honest, but at least it's better than crying when you think of the state of the industry and people working in it.

    I fucking suck at a lot of things. And I still meet highly paid people I have to explain to how to do their freaking job. At which I suck. This is sad.



  • @izzion said:

    The number of justifiable reasons to run a 32-bit userspace at this point are actually smaller than His High Exaltedness's PQ.

    Look, it's simple: is that supported by the OS, or not?

    If so, then the error is obviously not his, it's in the broken shitty open source software he's using which is all broken.

    If not, then I concede that he's the WTF here.

    The real tragedy is that in the shitty Linux ecosystem a question like, "is that supported by the OS?" is impossible to answer, because it's a disorganized mess of complete bullshit run by amateurs.



  • The .net Framework is like 99% of what you need, so. It's kind of like one HUGE library, and it does get security patches without you, the application owner, having to lift a finger.

    Third-party libraries are still annoying though.



  • @boomzilla said:

    Of course, dependency management is a PITA. It would be nice if someone came up with a universal solution. Also, Coke in the drinking fountains.

    Just cram it all in a .msi, then the user just needs to double-click. Postgres can be redistributed, so can Ruby, Rails, etc.

    Oh right; Linux has nothing like that, because it's a ball of broken shit.



  • @boomzilla said:

    Yes, like any solution is going to be. And I'm quite grateful that people have put in all the work.

    Wouldn't it be better if that work went into making the actual programs better in some way? Instead of people just constantly having to run to keep them working at all?

    My dear, [Linux developers] must run as fast as we can, just to stay in place. And if you wish to go anywhere you must run twice as fast as that.



  • @anonymous234 said:

    VMs and containers had to be invented because OSes couldn't get their shit together.

    Windows has .msi.

    Shitty open source developers don't generally use the facilities Windows provides (while laughingly claiming their programs are fully compatible with Windows), but that's because they're incompetent morons.

    How many decades did it take before Firefox figured out how to make an .msi installer and stop shitting its cache files in the Roaming AppData folder? All while the claimed to fully support Windows.



  • @Onyx said:

    You only need root to set it up to autorun. Once. When you're setting it up.

    Right; but why should you have to?

    You created a service account, the service account should have its own startup list that does the stuff required for that service to run, and the OS should just have a check box saying "login this service account on startup". Bam. Problem solved, no root. Plus a much better solution, since all your shit is compartmentalized.

    I don't think any current OS does that, but there's no reason they couldn't.


  • :belt_onion:

    Here's another good part, that isn't in the article - Jeff responded on Hacker News:

    I'm sorry it was difficult to get Discourse up and running!

    If it helps, I'd be glad to throw in a free Digital Ocean $20/month droplet -- I can set it up following our guide at http://blog.discourse.org/2014/04/install-discourse-in-under... and then hand it over to you for everything else. We also have a special Mandrill reseller code so we can give you a Mandrill account with 50k emails/month as part of the package. Just email us at team@discourse.org and I'll make it happen.

    Bug reports and PRs, ban hammer. Bad press, nice manners?

    (Obviously I am a fan, because PHP fractals, man.)

    Yes, I too like a good rant as much as the next person. The PHP rant was pretty on topic - so what do you think about this one?

    Yes, this will require Docker, which means a 64-bit OS and a modern Linux kernel. We initially tried supporting arbitrary Discourse installs but it quickly became a support nightmare for our small 7 person team. We adopted Docker because we saw it as the only way forward to have sane support both internally (for hosting) and externally. We are all-in on Docker, for what it's worth.

    Ah, "works on my machine", write large. Wouldn't it be better to use Ansible or Puppet or some sane configuration management system so if users wanted to make it easy to install Discourse on, say, a RPi (for some reason) they could do so ... in the spirit of Open Source and all that.

    I'd argue Rails has historically had very little incentive to support super easy server installs; how many large open source Rails projects can you even name? Certainly 37signals nee Basecamp isn't too concerned about how hard it is to install their webapps on a server...

    Basecamp also is not available except as an online service - are you saying you made a bad decision in allowing people to self-host? Or that you do want people to be able to self-host, you just don't consider it anything higher than an F priority?

    Long term, the only real solution is VPS and Docker. I think that has a lot of other benefits for the whole hosting ecosystem, too -- it opens the door to not just Rails deployments but all kinds of alternatives.

    For the hosting provider, maybe. But I don't think eevee is a hosting provider.


  • ♿ (Parody)

    @blakeyrat said:

    If Discourse requires Sidekiq, why doesn't it install it itself? Or at least detect if it's running? That's a perfectly valid argument.

    You cannot be serious. It does. When you install it in the normal way. I mean, I get that since it's Linux this is all super confusing. But it would be like if this guy tried install everything for something on Windows manually instead of using the official .msi installer.


  • BINNED

    @blakeyrat said:

    and the OS should just have a check box saying "login this service account on startup"

    Perfectly doable. That's kinda-sorta what Apache does. The way it does it is a bit hacky IIRC, but that's what happens.

    The contention is whether you should be able to check that checkbox / edit config file / wave magic wand to make it happen without being root / elevated user.


  • ♿ (Parody)

    @blakeyrat said:

    Oh right; Linux has nothing like that, because it's a ball of broken shit.

    :rolleyes: Yeah, this shit never gets old.


  • ♿ (Parody)

    @blakeyrat said:

    Wouldn't it be better if that work went into making the actual programs better in some way?

    Yay for strawmen!



  • @TwelveBaud said:

    C:\Users\dev_07>npm -v
    1.4.28

    C:\Users\dev_07>node -v
    v0.10.33

    So Node Package Manager is at a later version than Node itself? And NPM has reached 1.0 before Node?



  • @blakeyrat said:

    Look, it's simple: is that supported by the OS, or not?

    If so, then the error is obviously not his, it's in the broken shitty open source software he's using which is all broken.

    The whole point behind Linux is it Lets You Do It, which means you can shoot yourself in the foot, but only because you asked for it. This is making the assumption that the user is not a braindead moron like the guy in the article clearly is.



  • @boomzilla said:

    You cannot be serious. It does.

    Demonstrably it does not. The article we're all discussion says as much.



  • Go also supports building as a dynamic library.

    Another reason for dynamic libraries is mix-and-match plugins. You wouldn't want to have to recompile the entire program just to add some vendor's extension for it.



  • @boomzilla said:

    Yay for strawmen!

    Ok, strawmen, whatever. Are you seriously saying that having tons of people doing nothing but packaging is a good use of those man-hours? That there is literally nothing more important those people could be doing with their time to improve the OS?


  • ♿ (Parody)

    @blakeyrat said:

    @boomzilla said:
    You cannot be serious. It does.

    Demonstrably it does not. The article we're all discussion says as much.

    Again, what your saying is the Windows equivalent of ignoring the .msi and then copying exes manually and complaining that you missed a dll and some registry settings. Or you just didn't read very carefully.

    @blakeyrat said:

    Ok, strawmen, whatever. Are you seriously saying that having tons of people doing nothing but packaging is a good use of those man-hours? That there is literally nothing more important those people could be doing with their time to improve the OS?

    Yes. Yes, I am. I get that you disagree, but your argument is like saying no one should be an actress because working on a cure for cancer would be a better use of their time. Also, you've never shown any sign of comprehending what a package manager is and does. Even after it being explained to you multiple times.



  • @blakeyrat said:

    Why the fuck does Ruby care if the OS is 32 or 64 bit? This is an OBVIOUS bug you're just glossing over.

    The computer had everything Discourse needed already installed. It wasn't a "special snowflake".

    And let's say for a minute it was-- so fucking WHAT? Unless he did something that was in violation of the OS contract, everything should still work fine "special snowflake" or not. This is like when people were blaming me for my "weird" Windows configuration when everything that was done to my Windows install followed the OS contract to the letter.

    I don't know why ruby doesn't just work with this strange setup. I guess it has to load 32-bit or 64-bit version of some thing depending on system sniffing, and whatever code does that gets confused by the kernel vs userland difference.

    And yes, this definitely feels like it breaks the "OS contract", whatever that is. System should be either 32-bit or 64-bit. If he wants to mess around with custom-compiling his kernel or whatever he was doing, fine, but then you can't expect everything else to work out of the box.

    @blakeyrat said:

    If Discourse requires Sidekiq, why doesn't it install it itself? Or at least detect if it's running? That's a perfectly valid argument.

    It does, if you use the scripting in the officially supported docker installation.

    This would be like if you installed a program by copying files manually instead of using its setup, then complained "how come it doesn't detect all the dependencies it needs!?" It would, if you didn't skip over the step that does that.

    @blakeyrat said:

    Running a command over CURL as root is "fine"? Seriously?

    Umm, yes? How is that different from running a setup.exe you downloaded from the Internet?



  • The 64-bit kernel and 32-bit userland thing sounds pretty strange and I guarantee it made things more difficult, but the rest of his blog is not far off from my own experiences installing ANY Ruby on Rails application.


  • Grade A Premium Asshole

    Everyone always says that, but I find most Rails apps to be straight forward to install. The worst I have installed so far was probably OpenProject and I would guess that it took around 20 minutes once the VM was provisioned.



  • @boomzilla said:

    Again, what your saying is the Windows equivalent of ignoring the .msi and then copying exes manually and complaining that you missed a dll and some registry settings. Or you just didn't read very carefully.

    ... are you suggesting that the Linux equivalent of a .msi installation file is Docker?

    @boomzilla said:

    Also, you've never shown any sign of comprehending what a package manager is and does.

    Haha, what?

    I know exactly what it is and does. Cite that shit. I dare you. I double-dog dare you.

    @cartman82 said:

    I don't know why ruby doesn't just work with this strange setup.

    Because it's buggy and broken? There's no other explanation.

    @cartman82 said:

    And yes, this definitely feels like it breaks the "OS contract", whatever that is.

    Ok; you find that in documentation, and I'll agree that this guy is a WTF. But I'm not just going to accept the say-so from some forum goon. Show be the Ubuntu docs.

    @cartman82 said:

    Umm, yes? How is that different from running a setup.exe you downloaded from the Internet?

    Setup.exe is at least signed. Sure it's still a risk, but saying that Windows is bad is no excuse for Linux also being bad-- it just means everything in IT is complete shit. Which it is.


  • ♿ (Parody)

    @blakeyrat said:

    ... are you suggesting that the Linux equivalent of a .msi installation file is Docker?

    Docker is more like the MS Installer in this analogy. It's not an exact analogy, but yeah, they have docker, which does the heavy lifting, and some scripts or configuration or whatever that tells it what it needs, where to put stuff, etc.

    @blakeyrat said:

    I know exactly what it is and does. Cite that shit. I dare you. I double-dog dare you.

    Sorry, I only respond to quintuple-dog dares. And no do overs.


  • Grade A Premium Asshole

    @boomzilla said:

    tells it what it needs, where to put stuff

    :giggity:



  • @Bort said:

    @TwelveBaud said:
    C:\Users\dev_07>npm -v
    1.4.28

    C:\Users\dev_07>node -v
    v0.10.33

    So Node Package Manager is at a later version than Node itself? And NPM has reached 1.0 before Node?

    No worries, Node has overtaken them again and sits at version 4.1.0 at the moment.

    No, that's not the wrong major number. It was at v0.12.7 on 2015-07-09 and then jumped to v4.0.0 on 2015-09-08.


Log in to reply