Tuesday, June 3, 2014

Pushing to a remote bitbucket repository with Mercurial

Ugh.  This is a lot harder than it ought to be.  I am finding that a lot of activities with Mercurial is just easier to do through the command line instead of TortoiseHg.

If you want to push to your bitbucket repo, type this command in your directory:

> hg push https://username@bitbucket.org/username/someproject

However, the smarter way is to go into the .hg directory and modify the hgrc file like so:

[paths]
default-push = https://username@bitbucket.org/username/someproject

Now just type 'hg push' at the command prompt.

If you do not see the hgrc file, then you will have to make one!

Monday, June 2, 2014

Copying Text To And From the Command Prompt in Microsoft

When programming in a Microsoft development environment, I actually find the Command Prompt to be fairly useful.  However, I keep forgetting how to copy and paste text to it.  This page shows you how:

https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/windows_dos_copy.mspx?mfr=true

Saturday, April 19, 2014

Managing Multiple Versions of Python with pyenv

I have been recently working on a project that needed to be tested on multiple versions of Python.  I found pyenv to be invaluable:

https://github.com/yyuu/pyenv

This project was apparently forked rbenv and ruby-build and works about the same.

I also found this article useful:

http://dtucker.co.uk/hack/installing-pyenv-on-mac-osx.html

Python + Gmail = Email Adventures!

Today I learned how to send email using Gmail as a service provider.  I learned from reading this thread:

http://stackoverflow.com/questions/10147455/trying-to-send-email-gmail-as-mail-provider-using-python

Sunday, April 6, 2014

Location of bower_components directory in AngularJS phone tutorial

I'm actually enjoying the Angular JS tutorial: http://docs.angularjs.org/tutorial

However, I have a sneaking suspicion that the bower_components directory should be located on the same level as the app directory (not inside of it).

christohersmbp2:angular-phonecat christopherspears$ ll | awk '{print $9}'

LICENSE
README.md
app/
bower.json
bower_components/ <- moved it here
node_modules/
npm-debug.log
package.json
scripts/

test/

Am I wrong?

Sunday, March 30, 2014

Location of the Procfile

Keep your Procfile in your project's top directory!  Otherwise, gunicorn (the server running your app) will not be able to see the Procfile!


/Users/christopherspears/PyDevel/tapeworm_django/
Procfile
README.md
requirements.txt
tapeworm/
  __init__.py
  __init__.pyc
  drawings/
  manage.py
  tapeworm/
  templates/

Friday, March 28, 2014

Deploying a Python Django app to Heroku

Today I decided to try to deploy my app to Heroku.  Fortunately, I found a pretty good tutorial that shows me how to do this:

https://devcenter.heroku.com/articles/getting-started-with-django

I will be detailing my trials and tribulations as I attempt to do this.  My first issue was that I could not get foreman to work.  The gem foreman is not part of the django-toolbelt.  It is part of the Heroku ToolBelt.  I fixed this by uninstalling and reinstalling the gem.  I then discovered that the Procfile I created needed to be at the same level as the manage.py file.  Otherwise, I would get a bunch of this:

(tapeworm_django)christohersmbp2:tapeworm_django christopherspears$ foreman start
11:18:52 web.1  | started with pid 2122
11:18:52 web.1  | 2014-03-28 11:18:52 [2122] [INFO] Starting gunicorn 18.0
11:18:52 web.1  | 2014-03-28 11:18:52 [2122] [INFO] Listening at: http://0.0.0.0:5000 (2122)
11:18:52 web.1  | 2014-03-28 11:18:52 [2122] [INFO] Using worker: sync
11:18:52 web.1  | 2014-03-28 11:18:52 [2125] [INFO] Booting worker with pid: 2125
11:18:52 web.1  | 2014-03-28 11:18:52 [2125] [ERROR] Exception in worker process:
11:18:52 web.1  | Traceback (most recent call last):
11:18:52 web.1  |   File "/Users/christopherspears/.virtualenvs/tapeworm_django/lib/python2.7/site-packages/gunicorn/arbiter.py", line 495, in spawn_worker
11:18:52 web.1  |     worker.init_process()
11:18:52 web.1  |   File "/Users/christopherspears/.virtualenvs/tapeworm_django/lib/python2.7/site-packages/gunicorn/workers/base.py", line 106, in init_process
11:18:52 web.1  |     self.wsgi = self.app.wsgi()
11:18:52 web.1  |   File "/Users/christopherspears/.virtualenvs/tapeworm_django/lib/python2.7/site-packages/gunicorn/app/base.py", line 114, in wsgi
11:18:52 web.1  |     self.callable = self.load()
11:18:52 web.1  |   File "/Users/christopherspears/.virtualenvs/tapeworm_django/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 62, in load
11:18:52 web.1  |     return self.load_wsgiapp()
11:18:52 web.1  |   File "/Users/christopherspears/.virtualenvs/tapeworm_django/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 49, in load_wsgiapp
11:18:52 web.1  |     return util.import_app(self.app_uri)
11:18:52 web.1  |   File "/Users/christopherspears/.virtualenvs/tapeworm_django/lib/python2.7/site-packages/gunicorn/util.py", line 354, in import_app
11:18:52 web.1  |     __import__(module)
11:18:52 web.1  | ImportError: No module named tapeworm.wsgi
11:18:52 web.1  | Traceback (most recent call last):
11:18:52 web.1  |   File "/Users/christopherspears/.virtualenvs/tapeworm_django/lib/python2.7/site-packages/gunicorn/arbiter.py", line 495, in spawn_worker
11:18:52 web.1  |     worker.init_process()
11:18:52 web.1  |   File "/Users/christopherspears/.virtualenvs/tapeworm_django/lib/python2.7/site-packages/gunicorn/workers/base.py", line 106, in init_process
11:18:52 web.1  |     self.wsgi = self.app.wsgi()
11:18:52 web.1  |   File "/Users/christopherspears/.virtualenvs/tapeworm_django/lib/python2.7/site-packages/gunicorn/app/base.py", line 114, in wsgi
11:18:52 web.1  |     self.callable = self.load()
11:18:52 web.1  |   File "/Users/christopherspears/.virtualenvs/tapeworm_django/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 62, in load
11:18:52 web.1  |     return self.load_wsgiapp()
11:18:52 web.1  |   File "/Users/christopherspears/.virtualenvs/tapeworm_django/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 49, in load_wsgiapp
11:18:52 web.1  |     return util.import_app(self.app_uri)
11:18:52 web.1  |   File "/Users/christopherspears/.virtualenvs/tapeworm_django/lib/python2.7/site-packages/gunicorn/util.py", line 354, in import_app
11:18:52 web.1  |     __import__(module)
11:18:52 web.1  | ImportError: No module named tapeworm.wsgi
11:18:52 web.1  | 2014-03-28 11:18:52 [2125] [INFO] Worker exiting (pid: 2125)
11:18:52 web.1  | 2014-03-28 11:18:52 [2122] [INFO] Shutting down: Master
11:18:52 web.1  | 2014-03-28 11:18:52 [2122] [INFO] Reason: Worker failed to boot.
11:18:52 web.1  | exited with code 3

11:18:52 system | sending SIGTERM to all processes

By the way, I always forget to do this when creating a Heroku app:

(tapeworm_django)christohersmbp2:tapeworm_django christopherspears$ heroku apps:create tapeworm
Creating tapeworm... done, stack is cedar
http://tapeworm.herokuapp.com/ | git@heroku.com:tapeworm.git
Git remote heroku added

Otherwise, Heroku is going to give your app a name like "Flowing Downstream Leaves", which is annoying.  I managed to successfully push my app to Heroku.  The next step is to try to turn it on.