I next put in multiple virtual hosts.
I made the mistake of referring to the files off in absolute paths elsewhere in the PC
It seemed to work - but only sometimes... The pictures would not appear - or would only appear on the first call. Further web-page requests after that might be text-only, or might just hang forever.
Returning the locations to be subdirectories of the <nginx>/html directory fixed all the problems.
Thursday, 31 January 2013
Stage 1 - Set up nginx on Windows, with ZoneAlarm
Ultimately, my plan is to use nginx to serve the static web pages for multiple domain names, and for it to act as a reverse-proxy to the Seaside web-apps.
Stage 1 - get nginx working, and visible from the internet.
Step 1 - get nginx (pronounced "Engine X") working on Windows.
At the Command Line (Run cmd from Start Menu), cd <the folder containing the application app>
type nginx
On Vista, it works with three processes, all called "nginx" with Process Ids (PIDs) listed by:
tasklist /FI "IMAGENAME eq nginx*"
Notes: It sets up using the parameters contained in the nginx.conf file held in
<the folder containing the nginx application> /conf
This nginx.conf file provides a webserver on port 80.
worker_processes 2; # One for each CPU core
error_log logs/main_error.log;
pid logs/nginx.pid;
events { worker_connections 1024; }
http
{ include mime.types;
# On Windows, this goes to [<nginx>/conf/]mime.types
# i.e. the mime.types file in the conf dir in the nginx's directory
default_type application/octet-stream;
index index.htm index.html index.st index.php;
server #default
{ server_name :80;
access_log logs/catchall.access.log;
error_log logs/catchall.error.log;
root html\catchall;
}
}
Step 2 - close down nginx on Windows
run cmd from Start Menu again, to bring up a second Command Line
(As the cmd window opened in step 1 gets taken over by nginx, so cannot be used)
nginx -s stop
If nginx has had a problem with the configuration file, this sometimes might not work.
First alternative:
nginx -s quit
If this also does not work, the second alternative:
Find the PIDs for the principal nginx process on Window
tasklist /FI "IMAGENAME eq nginx*"
Kill the processes
taskkill /PID <number in the nginx.pid file>
Step 3 get nginx visible through the router's firewall.
Make sure the PC running nginx has a static IP address.
Log into the router, and use port-forwarding for HTTP on port 80, to the PC.
Step 4 Get nginx working through ZoneAlarm Free firewall
Check if the server is accessible from outside your local network. (A good way is to switch off wifi on your phone, and then use the phone's browser to access the website via the website's domain name).
If it works, that's great.
If it doesn't work however...
Switch off ZoneAlarm Free Firewall.
Check if the server is accessible from outside your local network.
If it still doesn't work ...
Re-check that the web-server is running: tasklist /FI "IMAGENAME eq nginx*"
Re-check what IP address the PC is on, and that it matches the IP being used on the router's port-forward. (Also check that it matches the static IP address that you want the PC to use).
If the server is accessible, switch ZoneAlarm back on.
Delete nginx from the list of programmes in ZoneAlarm
Try to access the webserver via localhost
and try to access the webserver from another local device via the IP address.
Zonealarm will pop up a window asking if nginx should be allowed to provide local access.
Check if the server is accessible from outside.
Zonealarm will pop up a window asking if nginx should be allowed to provide access to the internet.
Stage 1 - get nginx working, and visible from the internet.
Step 1 - get nginx (pronounced "Engine X") working on Windows.
At the Command Line (Run cmd from Start Menu), cd <the folder containing the application app>
type nginx
On Vista, it works with three processes, all called "nginx" with Process Ids (PIDs) listed by:
tasklist /FI "IMAGENAME eq nginx*"
Notes: It sets up using the parameters contained in the nginx.conf file held in
<the folder containing the nginx application> /conf
This nginx.conf file provides a webserver on port 80.
worker_processes 2; # One for each CPU core
error_log logs/main_error.log;
pid logs/nginx.pid;
events { worker_connections 1024; }
http
{ include mime.types;
# On Windows, this goes to [<nginx>/conf/]mime.types
# i.e. the mime.types file in the conf dir in the nginx's directory
default_type application/octet-stream;
index index.htm index.html index.st index.php;
server #default
{ server_name :80;
access_log logs/catchall.access.log;
error_log logs/catchall.error.log;
root html\catchall;
}
}
Step 2 - close down nginx on Windows
run cmd from Start Menu again, to bring up a second Command Line
(As the cmd window opened in step 1 gets taken over by nginx, so cannot be used)
nginx -s stop
If nginx has had a problem with the configuration file, this sometimes might not work.
First alternative:
nginx -s quit
If this also does not work, the second alternative:
Find the PIDs for the principal nginx process on Window
tasklist /FI "IMAGENAME eq nginx*"
Kill the processes
taskkill /PID <number in the nginx.pid file>
Step 3 get nginx visible through the router's firewall.
Make sure the PC running nginx has a static IP address.
Log into the router, and use port-forwarding for HTTP on port 80, to the PC.
Step 4 Get nginx working through ZoneAlarm Free firewall
Check if the server is accessible from outside your local network. (A good way is to switch off wifi on your phone, and then use the phone's browser to access the website via the website's domain name).
If it works, that's great.
If it doesn't work however...
Switch off ZoneAlarm Free Firewall.
Check if the server is accessible from outside your local network.
If it still doesn't work ...
Re-check that the web-server is running: tasklist /FI "IMAGENAME eq nginx*"
Re-check what IP address the PC is on, and that it matches the IP being used on the router's port-forward. (Also check that it matches the static IP address that you want the PC to use).
If the server is accessible, switch ZoneAlarm back on.
Delete nginx from the list of programmes in ZoneAlarm
Try to access the webserver via localhost
and try to access the webserver from another local device via the IP address.
Zonealarm will pop up a window asking if nginx should be allowed to provide local access.
Check if the server is accessible from outside.
Zonealarm will pop up a window asking if nginx should be allowed to provide access to the internet.
Labels:
cmd,
configuration,
firewall,
nginx,
port forwarding,
taskkill,
tasklist,
Windows,
ZoneAlarm
Sunday, 20 January 2013
Problems moving Seaside to port 80 on Windows
I booted up my Windows PC, and started Seaside, which defaults to running the web-server on port 8080.
I stopped the process, and changed the port number, (action-clicking on the the top pane of the Seaside control panel, then selecting 'Port...' from the menu), then re-starting, and got an error message.
I inferred from the error that port 80 was already in use.
So, at the Windows command prompt (Windows Start Menu, "cmd", or "cmd" and Shift-Control-Enter from an administrator account, to run with Administrator privileges)
NETSTAT -p tcp -ano
List all (-a) the ports using the TCP protocol (-p tcp) in numerical form (-n), and display the process id (PID) for the owning process (-o).
This was good, but it gave a PID of 4112 - which was not appearing on the list of processes and services in Windows Task Manager.
I then ran :
tasklist /FI "PID eq 4112" /FO table
Which lists the active tasks and processes /FIlterered by process Id equal to "4112", in the /FOrmat of a table (can also be a list or a csv).
It turned out to be Skype that had control of port 80. I killed Skype, and everything was ticketty-boo.
I stopped the process, and changed the port number, (action-clicking on the the top pane of the Seaside control panel, then selecting 'Port...' from the menu), then re-starting, and got an error message.
I inferred from the error that port 80 was already in use.
So, at the Windows command prompt (Windows Start Menu, "cmd", or "cmd" and Shift-Control-Enter from an administrator account, to run with Administrator privileges)
NETSTAT -p tcp -ano
List all (-a) the ports using the TCP protocol (-p tcp) in numerical form (-n), and display the process id (PID) for the owning process (-o).
This was good, but it gave a PID of 4112 - which was not appearing on the list of processes and services in Windows Task Manager.
I then ran :
tasklist /FI "PID eq 4112" /FO table
Which lists the active tasks and processes /FIlterered by process Id equal to "4112", in the /FOrmat of a table (can also be a list or a csv).
It turned out to be Skype that had control of port 80. I killed Skype, and everything was ticketty-boo.
Saturday, 12 January 2013
File In and File Out
To store a new package to a file, which will be stored in the Contents\Resources subfolder of the Smalltalk folder:
Right-click the package in the class browser, > various > file out (o)
To load the package back in to a fresh image:
Left-click the world, Tools > File Browser
Right-click the package in the class browser, > various > file out (o)
To load the package back in to a fresh image:
Left-click the world, Tools > File Browser
Accessors: getters and setters
Smalltalk accessors are always named after the variable they access.
If a variable is called xVal then the getter is also called xVal and the setter is called xVal:
If a variable is called xVal then the getter is also called xVal and the setter is called xVal:
Copy and Paste tips from Pharo By Example
When you c'n'p from PBE, beware: PBE uses − instead of - (i.e. an m dash instead of a minus sign), so any expression including a - operator will not compile until the m dashes are replaced with minus signs.
Create a new Class in Pharo Smalltalk
Amend the package's sample code - changing "Object" to the class you want to
sub-class, and put the name of the new class, prefixed by # (The subclass message gets sent to the object you specified, with a parameter of the name you want to give to the new sub-class).
Action-click, then accept (Cmd-s)
On accept, the system, executes the code.
By convention, if a class defines a method named initialize, it will be called right after the object is created.
The first message to send in an initialize method is generally to call the parent class's initialize method, via super initialize.
Open a workspace, and type myNewClassName new Select it, and inspect it
The inspector has three panes - the left pane lists the instance variables, and the bottom-right pane is a workspace who's self is bound to the object selected in the browser.
Action-click, then accept (Cmd-s)
On accept, the system, executes the code.
By convention, if a class defines a method named initialize, it will be called right after the object is created.
The first message to send in an initialize method is generally to call the parent class's initialize method, via super initialize.
Open a workspace, and type myNewClassName new Select it, and inspect it
The inspector has three panes - the left pane lists the instance variables, and the bottom-right pane is a workspace who's self is bound to the object selected in the browser.
Subscribe to:
Posts (Atom)