phpow 0.0.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +11 -32
- data/bin/phpow +34 -6
- data/lib/phpow.rb +1 -1
- data/lib/phpow/apache_configuration.rb +71 -0
- data/lib/phpow/templates/apache.conf.erb +6 -6
- data/lib/phpow/version.rb +1 -1
- metadata +8 -14
- data/lib/phpow/client.rb +0 -108
- data/lib/phpow/core.rb +0 -50
- data/lib/phpow/rack_app.rb +0 -39
- data/lib/phpow/templates/.powconfig +0 -1
- data/lib/phpow/templates/config.ru +0 -2
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d2eed5b96c884f3eff408f84ec68a64fd21b5747
|
4
|
+
data.tar.gz: d94a5d3d20c08815add5fe9f04ece86a67b0ef0e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3e8661ea2fc257257e34bfbafaf99e8f15f7fe4181993bdc95ce071aa80c57222ed4ecf8d0f42edcbe5cd300afc4b1a328951404a98dcefb08cd3633658381a0
|
7
|
+
data.tar.gz: 51af992bc6ca45bf964a3b909b8a27d837a802b577b9eafb2ded27f552408a93500e9b46b32d5022705377d24ea610730a2bef08930ef200d3cfc2b667cffda3
|
data/README.md
CHANGED
@@ -1,51 +1,30 @@
|
|
1
1
|
Phpow
|
2
2
|
=====
|
3
3
|
|
4
|
-
Develop your legacy PHP applications utilizing POW's TLDs on Mac OS X
|
4
|
+
Develop your legacy PHP applications utilizing POW's TLDs on Mac OS X.
|
5
5
|
|
6
6
|
Installation
|
7
7
|
------------
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
And then execute:
|
14
|
-
|
15
|
-
$ bundle
|
16
|
-
|
17
|
-
Or install it yourself as:
|
18
|
-
|
19
|
-
$ gem install phpow
|
9
|
+
```bash
|
10
|
+
gem install phpow
|
11
|
+
```
|
20
12
|
|
21
13
|
Usage
|
22
14
|
-----
|
23
15
|
|
24
|
-
`phpow
|
25
|
-
|
26
|
-
Creates the apache configuration file that will listen on port 8888
|
27
|
-
|
28
|
-
`phpow uninstall`
|
16
|
+
`phpow -h` for all commands and options.
|
29
17
|
|
30
|
-
|
31
|
-
|
32
|
-
`phpow create`
|
33
|
-
|
34
|
-
Creates symbolic links to phpow's `config.ru` and `.powconfig` files in the current working directory.
|
18
|
+
### Configuration
|
35
19
|
|
36
|
-
|
20
|
+
By default phpow will set up apache to listen on port 8888, and serve projects from the folder `~/Sites`.
|
37
21
|
|
38
|
-
|
22
|
+
Use the `--port PORT` and `--folder FOLDER` options to use a different port/location.
|
39
23
|
|
40
|
-
|
24
|
+
POW
|
25
|
+
---
|
41
26
|
|
42
|
-
|
43
|
-
|
44
|
-
```
|
45
|
-
# ~/.phpowconfig Example
|
46
|
-
export PHPOW_APACHE_PORT=8080
|
47
|
-
export PHPOW_PROJECTS_DIRECTORY=/Users/username/another/specific/directory
|
48
|
-
```
|
27
|
+
Set up a POW to portmap to your apache port. If you have the [powder](https://github.com/Rodreegez/powder) gem `powder portmap 8888` will do the trick.
|
49
28
|
|
50
29
|
Contributing
|
51
30
|
------------
|
data/bin/phpow
CHANGED
@@ -1,11 +1,39 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
|
4
|
-
$LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '../lib')
|
5
3
|
|
6
4
|
require 'phpow'
|
5
|
+
require 'optparse'
|
6
|
+
|
7
|
+
args = {}
|
8
|
+
|
9
|
+
opt_parser = OptionParser.new do |opt|
|
10
|
+
opt.banner = "Usage: phpow COMMAND [OPTIONS]"
|
11
|
+
opt.separator ""
|
12
|
+
opt.separator "Commands"
|
13
|
+
opt.separator " preview: preview apache.conf"
|
14
|
+
opt.separator " install: install apache.conf"
|
15
|
+
opt.separator " uninstall: delete apache.conf"
|
16
|
+
opt.separator ""
|
17
|
+
opt.separator "Options"
|
18
|
+
|
19
|
+
opt.on("-p", "--port PORT", "the port apache will listen on") do |port|
|
20
|
+
args[:port] = port
|
21
|
+
end
|
22
|
+
|
23
|
+
opt.on("-f", "--folder FOLDER", "the folder that will serve as apache's document root") do |document_root|
|
24
|
+
args[:document_root] = document_root
|
25
|
+
end
|
26
|
+
|
27
|
+
opt.on("-h","--help","help") do
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
opt_parser.parse!
|
7
32
|
|
8
|
-
|
9
|
-
|
33
|
+
command_name = ARGV.shift
|
34
|
+
if %w[preview install uninstall].include?(command_name)
|
35
|
+
Phpow::ApacheConfiguration.new(args).send(command_name)
|
36
|
+
else
|
37
|
+
puts opt_parser
|
38
|
+
end
|
10
39
|
|
11
|
-
Phpow::Client.run(args)
|
data/lib/phpow.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require 'phpow/
|
1
|
+
require 'phpow/apache_configuration'
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
module Phpow
|
4
|
+
class ApacheConfiguration
|
5
|
+
attr_accessor :port, :document_root
|
6
|
+
|
7
|
+
def initialize(args = {})
|
8
|
+
@port = args.fetch(:port, 8888)
|
9
|
+
@document_root = args.fetch(:document_root, default_document_root)
|
10
|
+
end
|
11
|
+
|
12
|
+
def preview
|
13
|
+
puts template_result
|
14
|
+
end
|
15
|
+
|
16
|
+
def install
|
17
|
+
puts "You are about to write the file '#{pathname}'?"
|
18
|
+
print "Enter 'yes' to confirm: "
|
19
|
+
return unless gets.strip == "yes"
|
20
|
+
|
21
|
+
write_file
|
22
|
+
end
|
23
|
+
|
24
|
+
def uninstall
|
25
|
+
puts "You are about to permanently delete the file '#{pathname}'?"
|
26
|
+
print "Enter 'yes' to confirm: "
|
27
|
+
return unless gets.strip == "yes"
|
28
|
+
|
29
|
+
File.delete(pathname)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def pathname
|
35
|
+
"/etc/apache2/users/#{user}.conf"
|
36
|
+
end
|
37
|
+
|
38
|
+
def user
|
39
|
+
%x{whoami}.strip
|
40
|
+
end
|
41
|
+
|
42
|
+
def default_document_root
|
43
|
+
"/Users/#{user}/Sites"
|
44
|
+
end
|
45
|
+
|
46
|
+
def ensure_file_has_ideal_permissions
|
47
|
+
File.chmod(0644, pathname)
|
48
|
+
end
|
49
|
+
|
50
|
+
def ensure_file_is_writable
|
51
|
+
unless File.owned?(pathname)
|
52
|
+
puts "'#{File.dirname(pathname)}' is write protected by root. You will have to enter your administrator password in order to create #{pathname}"
|
53
|
+
%x{sudo touch #{pathname} && sudo chown #{user} #{pathname}}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def write_file
|
58
|
+
ensure_file_is_writable
|
59
|
+
ensure_file_has_ideal_permissions
|
60
|
+
File.write(pathname, template_result)
|
61
|
+
end
|
62
|
+
|
63
|
+
def template_result
|
64
|
+
template_source.result(instance_eval { binding })
|
65
|
+
end
|
66
|
+
|
67
|
+
def template_source
|
68
|
+
ERB.new(File.read(File.join(File.dirname(__FILE__), "templates", "apache.conf.erb")))
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Apache configuration
|
1
|
+
# Apache configuration generated by phpow
|
2
2
|
# Should be written to /etc/apache2/users/username.conf on Mac OS X
|
3
3
|
|
4
4
|
# Enable PHP
|
@@ -11,12 +11,12 @@ LoadModule php5_module libexec/apache2/libphp5.so
|
|
11
11
|
</IfModule>
|
12
12
|
</IfModule>
|
13
13
|
|
14
|
-
# Pow is using port 80. Will forward to apache on <%=
|
15
|
-
Listen <%=
|
14
|
+
# Pow is using port 80. Will forward to apache on <%= port %>
|
15
|
+
Listen <%= port %>
|
16
16
|
|
17
17
|
# Virtual hosts, piggy-backing on POW's .dev
|
18
|
-
DocumentRoot <%=
|
19
|
-
<Directory "<%=
|
18
|
+
DocumentRoot <%= document_root %>
|
19
|
+
<Directory "<%= document_root %>/">
|
20
20
|
Options Indexes MultiViews FollowSymLinks
|
21
21
|
AllowOverride All
|
22
22
|
Order allow,deny
|
@@ -25,5 +25,5 @@ DocumentRoot <%= projects_directory %>
|
|
25
25
|
|
26
26
|
NameVirtualHost 127.0.0.1
|
27
27
|
<VirtualHost 127.0.0.1>
|
28
|
-
VirtualDocumentRoot <%=
|
28
|
+
VirtualDocumentRoot <%= document_root %>/%-2+
|
29
29
|
</VirtualHost>
|
data/lib/phpow/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phpow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Daniel Ott
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-11-27 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: Develop your legacy PHP applications utilizing POW's TLDs on Mac OS X
|
15
14
|
email:
|
@@ -26,37 +25,32 @@ files:
|
|
26
25
|
- Rakefile
|
27
26
|
- bin/phpow
|
28
27
|
- lib/phpow.rb
|
29
|
-
- lib/phpow/
|
30
|
-
- lib/phpow/core.rb
|
31
|
-
- lib/phpow/rack_app.rb
|
32
|
-
- lib/phpow/templates/.powconfig
|
28
|
+
- lib/phpow/apache_configuration.rb
|
33
29
|
- lib/phpow/templates/apache.conf.erb
|
34
|
-
- lib/phpow/templates/config.ru
|
35
30
|
- lib/phpow/version.rb
|
36
31
|
- phpow.gemspec
|
37
32
|
homepage: http://github.com/danott/phpow
|
38
33
|
licenses: []
|
34
|
+
metadata: {}
|
39
35
|
post_install_message:
|
40
36
|
rdoc_options: []
|
41
37
|
require_paths:
|
42
38
|
- lib
|
43
39
|
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
-
none: false
|
45
40
|
requirements:
|
46
|
-
- -
|
41
|
+
- - '>='
|
47
42
|
- !ruby/object:Gem::Version
|
48
43
|
version: '0'
|
49
44
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
45
|
requirements:
|
52
|
-
- -
|
46
|
+
- - '>='
|
53
47
|
- !ruby/object:Gem::Version
|
54
48
|
version: '0'
|
55
49
|
requirements: []
|
56
50
|
rubyforge_project:
|
57
|
-
rubygems_version:
|
51
|
+
rubygems_version: 2.0.3
|
58
52
|
signing_key:
|
59
|
-
specification_version:
|
53
|
+
specification_version: 4
|
60
54
|
summary: Having a single TLD for both Rails and PHP development keeps things simple.
|
61
55
|
But both POW and Apache can't listen on port 80. Get around this by running a light
|
62
56
|
weight Rack application in POW as an in-between for Apache/PHP running on a different
|
data/lib/phpow/client.rb
DELETED
@@ -1,108 +0,0 @@
|
|
1
|
-
module Phpow
|
2
|
-
|
3
|
-
class Client
|
4
|
-
|
5
|
-
require 'fileutils'
|
6
|
-
extend Phpow
|
7
|
-
|
8
|
-
##
|
9
|
-
# A convenvetion borrowed from powify. Define the allowable command line methods.
|
10
|
-
#
|
11
|
-
AVAILABLE_METHODS = %w[create destroy install uninstall help]
|
12
|
-
|
13
|
-
class << self
|
14
|
-
|
15
|
-
##
|
16
|
-
# Phpow::Client.run
|
17
|
-
#
|
18
|
-
# A wrapper for the command line interface.
|
19
|
-
#
|
20
|
-
def run(args = [])
|
21
|
-
|
22
|
-
load_config
|
23
|
-
|
24
|
-
method = args[0].to_s.downcase
|
25
|
-
begin
|
26
|
-
raise "The command `#{args[0]}` does not exist for `phpow`!" unless Phpow::Client::AVAILABLE_METHODS.include?(method)
|
27
|
-
return send(method)
|
28
|
-
rescue Exception => e
|
29
|
-
puts e
|
30
|
-
end
|
31
|
-
help
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
##
|
36
|
-
# phpow create
|
37
|
-
# Create the symbolic links to effectively run Phpow:RackApp.
|
38
|
-
#
|
39
|
-
def create
|
40
|
-
symlink_files.each do |file|
|
41
|
-
FileUtils.ln_s(File.join(File.dirname(__FILE__), "templates", file), File.join(current_path, file))
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
##
|
47
|
-
# phpow destroy
|
48
|
-
# Unlink the files that were linked using phpow create.
|
49
|
-
#
|
50
|
-
def destroy
|
51
|
-
symlink_files.each do |file|
|
52
|
-
symlink_path = File.join(current_path, file)
|
53
|
-
FileUtils.rm(symlink_path) if File.symlink?(symlink_path)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
##
|
59
|
-
# phpow install
|
60
|
-
# Install the apache configuration file in `apache_conf_path`
|
61
|
-
#
|
62
|
-
def install
|
63
|
-
require 'erb'
|
64
|
-
template = ERB.new(File.read(File.join(File.dirname(__FILE__), "templates", "apache.conf.erb")))
|
65
|
-
result = template.result(binding)
|
66
|
-
|
67
|
-
# Need the current user to own the file in able to write to it.
|
68
|
-
unless File.owned?(apache_conf_path)
|
69
|
-
puts "'#{File.dirname(apache_conf_path)}' is write protected by root. You will have to enter your administrator password in order to create #{apache_conf_path}"
|
70
|
-
%x{sudo touch #{apache_conf_path} && sudo chown #{user} #{apache_conf_path}}
|
71
|
-
end
|
72
|
-
|
73
|
-
f = File.new(apache_conf_path, 'w')
|
74
|
-
f.puts(result)
|
75
|
-
f.chmod(0644)
|
76
|
-
f.close
|
77
|
-
end
|
78
|
-
|
79
|
-
|
80
|
-
##
|
81
|
-
# phpow uninstall
|
82
|
-
# Remove the apache configuration file from `apache_conf_path`
|
83
|
-
#
|
84
|
-
def uninstall
|
85
|
-
puts "Are you sure you want to remove the file '#{apache_conf_path}'?"
|
86
|
-
print "Enter 'yes' to confirm: "
|
87
|
-
|
88
|
-
confirmation = gets.strip.downcase
|
89
|
-
return unless confirmation == "yes"
|
90
|
-
|
91
|
-
%x{sudo rm #{apache_conf_path}}
|
92
|
-
end
|
93
|
-
|
94
|
-
|
95
|
-
##
|
96
|
-
# Print helpful information to the command line.
|
97
|
-
#
|
98
|
-
def help
|
99
|
-
print <<-HELPTEXT
|
100
|
-
See README at http://github.com/danott/phpow
|
101
|
-
HELPTEXT
|
102
|
-
end
|
103
|
-
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
107
|
-
|
108
|
-
end
|
data/lib/phpow/core.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'phpow/client'
|
2
|
-
require 'phpow/rack_app'
|
3
|
-
|
4
|
-
module Phpow
|
5
|
-
|
6
|
-
attr_accessor :apache_port, :projects_directory
|
7
|
-
|
8
|
-
def apache_port
|
9
|
-
@apache_port || 8888
|
10
|
-
end
|
11
|
-
|
12
|
-
def projects_directory
|
13
|
-
@projects_directory || "/Users/#{user}/Sites"
|
14
|
-
end
|
15
|
-
|
16
|
-
def projects_directory=(directory)
|
17
|
-
@projects_directory = directory.gsub(/\/*$/, '')
|
18
|
-
end
|
19
|
-
|
20
|
-
def current_path
|
21
|
-
%x{pwd}.strip
|
22
|
-
end
|
23
|
-
|
24
|
-
def user
|
25
|
-
%x{whoami}.strip
|
26
|
-
end
|
27
|
-
|
28
|
-
def apache_conf_path
|
29
|
-
"/etc/apache2/users/#{user}.conf"
|
30
|
-
end
|
31
|
-
|
32
|
-
def symlink_files
|
33
|
-
%w[config.ru .powconfig]
|
34
|
-
end
|
35
|
-
|
36
|
-
|
37
|
-
##
|
38
|
-
# Configuration variables can be stored in '~/.phpowconfig'
|
39
|
-
#
|
40
|
-
# PHPOW_APACHE_PORT: Configure apache to run on a port other than 8888
|
41
|
-
# PHPOW_PROJECTS_DIRECTORY: Serve your projects out of a directory other than /Users/user/Sites
|
42
|
-
#
|
43
|
-
def load_config
|
44
|
-
if File.exists?(File.expand_path('~/.phpowconfig'))
|
45
|
-
self.apache_port = %x{source ~/.phpowconfig; echo $PHPOW_APACHE_PORT}.strip unless %x{source ~/.phpowconfig; echo $PHPOW_APACHE_PORT}.strip.empty?
|
46
|
-
self.projects_directory = %x{source ~/.phpowconfig; echo $PHPOW_PROJECTS_DIRECTORY}.strip unless %x{source ~/.phpowconfig; echo $PHPOW_PROJECTS_DIRECTORY}.strip.empty?
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
data/lib/phpow/rack_app.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
module Phpow
|
2
|
-
|
3
|
-
class RackApp
|
4
|
-
|
5
|
-
require 'net/http'
|
6
|
-
include Phpow
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
load_config
|
10
|
-
end
|
11
|
-
|
12
|
-
def call(env)
|
13
|
-
request = Rack::Request.new(env)
|
14
|
-
headers = {}
|
15
|
-
|
16
|
-
# Make the POW request to the Apache server
|
17
|
-
# http://myapp.dev/full/path/goes/here/
|
18
|
-
# ...will map to...
|
19
|
-
# http://myapp.dev:8888/full/path/goes/here/
|
20
|
-
http = Net::HTTP.new(request.host, apache_port)
|
21
|
-
response = http.send_request(request.request_method, request.fullpath, request.body.read, headers)
|
22
|
-
|
23
|
-
# Map Net::HTTP response back to Rack::Request.call expects
|
24
|
-
status, headers, body = response.code, response.to_hash, [response.body]
|
25
|
-
|
26
|
-
# Research showed that browsers were choking on this for some reason.
|
27
|
-
# Probably not the be-all-end-all solution, but works for local development thus far.
|
28
|
-
headers.delete('transfer-encoding')
|
29
|
-
|
30
|
-
# Send the response back to POW
|
31
|
-
[status, headers, body]
|
32
|
-
|
33
|
-
rescue Errno::ECONNREFUSED
|
34
|
-
[500, {}, ["Server is down, try $ sudo apachectl start"]]
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
export POW_WORKERS=10
|