mini-heroku 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/mh +25 -0
- data/lib/mini-heroku.rb +162 -0
- metadata +48 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3991e69eb5a68627bebd68a704540863561eba2a
|
4
|
+
data.tar.gz: 7165c557f29f0c4ceabba209fc47980830e5b761
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: '03573348cd4f7b75b8465bc39aab2dfa03800288f6fb34ce5a1926372f8b0c77b68795d6ba71fb019bc5e830c75277cbdb32943fc8955f3fc30f86d3cf8ce2bb'
|
7
|
+
data.tar.gz: d3dad0d8fda0619f225fa5c8820f3c6ab078e61ff952225e2ee16c046b4d251d6f37242ed122becd3832907d2ce94e040ac4c9f4adead428812a677cf6b8e6d0
|
data/bin/mh
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "mini-heroku"
|
3
|
+
arg = ARGV[0].chomp.downcase
|
4
|
+
case arg
|
5
|
+
when "create"
|
6
|
+
name = ARGV[1]
|
7
|
+
MiniHeroku.create(name)
|
8
|
+
when "refresh"
|
9
|
+
MiniHeroku.refresh()
|
10
|
+
when "deploy"
|
11
|
+
MiniHeroku.deploy()
|
12
|
+
when "setenvironment"
|
13
|
+
MiniHeroku.setProductionEnvironment()
|
14
|
+
when "start"
|
15
|
+
MiniHeroku.start()
|
16
|
+
when "help"
|
17
|
+
puts "Commands are:"
|
18
|
+
puts "create *name*"
|
19
|
+
puts "refresh"
|
20
|
+
puts "deploy"
|
21
|
+
puts "start"
|
22
|
+
puts "setenvironment"
|
23
|
+
else
|
24
|
+
puts "MH: Unknown command: " + arg + " ; type \"help\" for help"
|
25
|
+
end
|
data/lib/mini-heroku.rb
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
module MiniHeroku
|
5
|
+
|
6
|
+
DEFAULT_PROCFILE = "web: bundle exec ruby server.rb -p $PORT"
|
7
|
+
DEFAULT_GITIGNORE = [".env","mhenvironment.json"].join("\n")
|
8
|
+
DEFAULT_SERVER = [
|
9
|
+
"require 'sinatra'",
|
10
|
+
"",
|
11
|
+
"get '/' do",
|
12
|
+
" \"Hello world! Your variable defaultKey is (probably empty): \#{ENV['defaultKey']}\"",
|
13
|
+
"end"
|
14
|
+
]
|
15
|
+
DEFAULT_CONFIG = {
|
16
|
+
devUsesProdEnviromnent: true,
|
17
|
+
environmentKeys: [
|
18
|
+
:defaultKey
|
19
|
+
]
|
20
|
+
}
|
21
|
+
|
22
|
+
def self.start()
|
23
|
+
system("heroku local")
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.create(name)
|
27
|
+
puts("MH: Creating #{name}")
|
28
|
+
system("git init")
|
29
|
+
system("heroku create #{name}")
|
30
|
+
refresh()
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.getGems()
|
34
|
+
installed = `gem list`.split("\n")
|
35
|
+
installed.map! do |g|
|
36
|
+
name, rest = g.split(" (")
|
37
|
+
version = rest.scan(/(^)((\d|\.)*)/)[0][1]
|
38
|
+
[name, version]
|
39
|
+
end
|
40
|
+
return Hash[installed]
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.refresh()
|
44
|
+
#config
|
45
|
+
config = DEFAULT_CONFIG
|
46
|
+
if File.file?("mhconfig.json")
|
47
|
+
config.merge!(JSON.parse(File.read("mhconfig.json"), :symbolize_names => true))
|
48
|
+
puts("MH: Config found")
|
49
|
+
end
|
50
|
+
File.open("mhconfig.json", "wb") do |f|
|
51
|
+
f.write JSON.pretty_generate(config)
|
52
|
+
end
|
53
|
+
|
54
|
+
#environment
|
55
|
+
environment = {
|
56
|
+
production: {},
|
57
|
+
development: {}
|
58
|
+
}
|
59
|
+
for key in config[:environmentKeys]
|
60
|
+
environment[:production][key] = ""
|
61
|
+
environment[:development][key] = ""
|
62
|
+
end
|
63
|
+
if File.file?("mhenvironment.json")
|
64
|
+
old = JSON.parse(File.read("mhenvironment.json"), :symbolize_names => true)
|
65
|
+
environment = environment.merge(old)
|
66
|
+
end
|
67
|
+
File.open("mhenvironment.json", "wb") do |f|
|
68
|
+
f.write(JSON.pretty_generate(environment))
|
69
|
+
end
|
70
|
+
|
71
|
+
#env file
|
72
|
+
File.open(".env", "w") do |f|
|
73
|
+
vars = {}
|
74
|
+
if config[:devUsesProdEnviromnent]
|
75
|
+
vars = environment[:production]
|
76
|
+
else
|
77
|
+
vars = environment[:development]
|
78
|
+
end
|
79
|
+
vars.each do |key, value|
|
80
|
+
f.puts("#{key}=#{value}")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
#procfile
|
85
|
+
if File.file?("Procfile")
|
86
|
+
puts "MH: Procfile found"
|
87
|
+
else
|
88
|
+
puts "MH: Creating Procfile"
|
89
|
+
File.open("Procfile", "w") do |f|
|
90
|
+
f.puts(DEFAULT_PROCFILE)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
#gitignore
|
95
|
+
if File.file?(".gitignore")
|
96
|
+
puts "MH: .gitignore found"
|
97
|
+
else
|
98
|
+
puts "MH: Creating .gitignore"
|
99
|
+
File.open(".gitignore", "w") do |f|
|
100
|
+
f.puts(DEFAULT_GITIGNORE)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
#gems
|
105
|
+
gems = ["sinatra"]
|
106
|
+
if File.file?("server.rb")
|
107
|
+
puts "MH: Checking Gems from server file"
|
108
|
+
gems = File.read("server.rb").split("\n").map do |line|
|
109
|
+
line.scan(/^(require ("|'))(\w*)("|')/).map{|match| match[2]}
|
110
|
+
end
|
111
|
+
gems.flatten!
|
112
|
+
else
|
113
|
+
puts "MH: Creating Default server file"
|
114
|
+
File.open("server.rb", "w") do |f|
|
115
|
+
f.puts(DEFAULT_SERVER)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
installedGems = getGems()
|
119
|
+
didInstall = false
|
120
|
+
for gem in gems
|
121
|
+
if !(installedGems.keys.include?(gem))
|
122
|
+
puts "MH: Installing Gem #{gem}"
|
123
|
+
system("gem install #{gem}")
|
124
|
+
didInstall = true
|
125
|
+
end
|
126
|
+
end
|
127
|
+
if didInstall
|
128
|
+
puts "MH: Re-checking Gems"
|
129
|
+
installedGems = getGems()
|
130
|
+
end
|
131
|
+
puts "MH: Creating Gemfile"
|
132
|
+
File.open("Gemfile", "w") do |f|
|
133
|
+
f.puts("source 'https://rubygems.org'")
|
134
|
+
f.puts("ruby '#{RUBY_VERSION}'")
|
135
|
+
gems.each do |gem|
|
136
|
+
f.puts("gem '#{gem}', '>=#{installedGems[gem]}'")
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
puts "MH: Bundle"
|
141
|
+
system("bundle")
|
142
|
+
puts "MH: Refresh complete"
|
143
|
+
end
|
144
|
+
|
145
|
+
def self.setProductionEnvironment()
|
146
|
+
environment = JSON.parse(File.read("mhenvironment.json"), :symbolize_names => true)[:production]
|
147
|
+
environment = environment.each.map{|key, val| "#{key}=#{val}"}.join(" ")
|
148
|
+
system("heroku config:set " + environment)
|
149
|
+
end
|
150
|
+
|
151
|
+
def self.deploy
|
152
|
+
puts("MH: Name the commit:")
|
153
|
+
name = STDIN.gets().chomp()
|
154
|
+
system("git add .")
|
155
|
+
system("git commit -m \"#{name}\"")
|
156
|
+
system("git push heroku master")
|
157
|
+
puts("MH: Deploy complete")
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
#MiniHeroku.create("mini-heroku-test")
|
162
|
+
#MiniHeroku.setProductionEnvironment()
|
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mini-heroku
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.9
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Martin Larsson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-06-26 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Makes it easy to create, update and deply a sinatra webserver to heroku.
|
14
|
+
Be warned, this gem might run over your files if something goes worng. see 'mh help'
|
15
|
+
for commands
|
16
|
+
email: martin.99.larsson@telia.com
|
17
|
+
executables:
|
18
|
+
- mh
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- bin/mh
|
23
|
+
- lib/mini-heroku.rb
|
24
|
+
homepage: http://rubygems.org/gems/mini-heroku
|
25
|
+
licenses:
|
26
|
+
- MIT
|
27
|
+
metadata: {}
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubyforge_project:
|
44
|
+
rubygems_version: 2.5.2
|
45
|
+
signing_key:
|
46
|
+
specification_version: 4
|
47
|
+
summary: Small gem for heroku and sinatra based webservers
|
48
|
+
test_files: []
|