I'm posting this because right now someone is scrounging the internet for 3
hours to find this simple solution, I hope that they find this post sooner
rather than later, and can move on to their next project!
*TLDR*
Goto /src/clj/myapp/server.clj
Edit "3000" to be whatever you want:
(defn -main [& args]
(let [port (Integer/parseInt (or (env :port) "3000"))]
(run-jetty app {:port port :join? false})))
Now Here's the journey of a new user to find this information...
Let's say you installed Clojure with:
lein new reagent myapp
You built out your app, and everything went well! Time to deploy.
You may have stumbled upon this DigitalOcean guide, How To Deploy a Clojure
Web Application on Ubuntu 14.04
<https://www.digitalocean.com/community/tutorials/how-to-deploy-a-clojure-web-application-on-ubuntu-14-04>
It worked mostly, though your app wants to run on port 3000, not 5000. No
problem, just changed it in the nginx config
6 server {
7 listen 80;
8 server_name www.myapp.us myapp.us;
9 location / {
10 proxy_pass http://127.0.0.1:3000;
11 proxy_http_version 1.1;
12 proxy_set_header Connection "";
13 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
14 proxy_set_header Host $http_host;
15 access_log /var/www/myapp/logs/myapp.access.log;
16 error_log /var/www/myapp/logs/myapp.error.log;
17 }
18 }
The recommended /etc/supervisor/conf.d/myapp.conf file worked great. Your
site is launched and all is well!
Okay so with that resounding success you decide you want to launch a second
clojure app.
First, if you're used to using php and nginx, you might be thinking you may
be able to have your app run on the default port buy "look" for another
url, maybe it's something you can easily change in the nginx config, or the
supervisor config, or maybe the project.clj file. But a search on google
seems to be focused on using separate port numbers:
How can I run multiple Ring apps on the same server?
<http://stackoverflow.com/questions/15732618/how-can-i-run-multiple-ring-apps-on-the-same-server>
You don't necessarily think of your app as a "Ring" app - sure it's a
library, but isn't this just Clojure? Anyways, this seems to be the
solution, but how do we change the port?
Searching google some more:
Offical Lein Ring Instructions <https://github.com/weavejester/lein-ring> -
not helpful
How to set ring port based on profile
<http://stackoverflow.com/questions/27945399/how-to-set-ring-port-based-on-profile>
-
something about profiles, not helpful
You browser the rest of the front page of google and continue to get posts
like this.
If you come from a mainstream language like PHP, you're thinking "Hmm,
deploying multiple apps is an extremely basic task.. Why do I feel like I'm
the first one to ever do it?"
Thinking that maybe it's just a standard Java thing, you start searching
for "change java jar port". But these all yeild posts that recommend
changing the port via commands like this:
java -jar jenkins.war --httpPort=9090
None of these will works, but you will have to wait 60 seconds after typing
it in each time to find out.
Hours have passed. For the first time in your life as a programmer, Google
has actually failed you.You are all alone now.
Finally, you open the project in an editor you're experienced with -
Sublime text - and search the whole project for port.
You find the place to change the port at /src/clj/myapp/server.clj !
You are victorious, but you feel let down by Google, and frustrated that
the solution was random flailing around.
*Epilogue*
I really love Clojure. This is the first time, in a bout 10 years I've been
this excited about programming. Functional, lisp-like programming feels
like an absolute revolution to someone who has only ever experienced, php,
ruby, python, and javascript.
However, early on in my Clojure journey I've encountered two extremely
basic problems where the solutions simply don't seem to be findable on
Google! There really is this feeling like, am I the first person to have
eve encountered this problem? Am I the only one who is coming to Clojure
from building web apps using Laravel (An excellent framework, unfortunately
written in php)
Maybe there aren't a whole lot of beginners, or maybe some of the beginner
written material no longer applies to the new fancy ways to get started.
This is concerning. As a newby I want to be able to jump in knowing that
the foundation has already been built. As nice as it is to use a command
like "lein new reagent myapp" - I don't want to do that if the result is I
get a tree of code made for me that most of the community hasn't used yet.
What's frustrating is that this folder structure isn't explicitly connected
to the project.clj - like there's no way you could study the project.clj
and determine that /src/clj/myapp/server.clj is used by anything. It just
happens magicaly, the complexity is hidden...
Again, I'm really enjoying clojure so far, and I really agree with the
creators vision, but I'm concerned whenever really easy tasks take forever
to do and seem to have hidden complexity.
I'm interested in other peoples thoughts here. Have you felt in a similar
way? What am I doing wrong?
Thanks!
Seth
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.