milia 1.2.1 → 1.3.1.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/confirmations_controller.rb +7 -7
- data/app/controllers/registrations_controller.rb +13 -19
- data/app/views/devise/registrations/new.html.haml +53 -0
- data/lib/generators/milia/install_generator.rb +44 -41
- data/lib/generators/milia/templates/devise_permitted_parameters.rb +18 -0
- data/lib/generators/milia/templates/initializer.rb +3 -9
- data/lib/milia.rb +3 -22
- data/lib/milia/base.rb +88 -109
- data/lib/milia/control.rb +25 -25
- data/lib/milia/invite_member.rb +6 -6
- data/lib/milia/version.rb +1 -1
- metadata +16 -184
- data/.document +0 -5
- data/.gitignore +0 -94
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
- data/.slugignore +0 -2
- data/.travis.yml +0 -4
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -20
- data/README.md +0 -1207
- data/Rakefile +0 -1
- data/doc/gemfile_addition.txt +0 -28
- data/doc/manual_sample.sh +0 -816
- data/doc/ref_notes.txt +0 -155
- data/doc/sample.sh +0 -276
- data/markdown.rb +0 -38
- data/milia.gemspec +0 -29
- data/test/.ruby-gemset +0 -1
- data/test/.ruby-version +0 -1
- data/test/Gemfile +0 -81
- data/test/Gemfile.lock +0 -223
- data/test/README.md +0 -83
- data/test/Rakefile +0 -6
- data/test/app/assets/javascripts/application.js +0 -16
- data/test/app/assets/stylesheets/application.css +0 -13
- data/test/app/controllers/application_controller.rb +0 -13
- data/test/app/controllers/home_controller.rb +0 -10
- data/test/app/helpers/application_helper.rb +0 -2
- data/test/app/models/member.rb +0 -34
- data/test/app/models/post.rb +0 -14
- data/test/app/models/team.rb +0 -9
- data/test/app/models/team_asset.rb +0 -6
- data/test/app/models/tenant.rb +0 -54
- data/test/app/models/user.rb +0 -14
- data/test/app/models/zine.rb +0 -8
- data/test/app/views/home/index.html.erb +0 -2
- data/test/app/views/home/show.html.erb +0 -2
- data/test/app/views/layouts/application.html.erb +0 -14
- data/test/bin/bundle +0 -3
- data/test/bin/rails +0 -4
- data/test/bin/rake +0 -4
- data/test/config/application.rb +0 -36
- data/test/config/boot.rb +0 -4
- data/test/config/database.yml +0 -25
- data/test/config/environment.rb +0 -5
- data/test/config/environments/development.rb +0 -48
- data/test/config/environments/production.rb +0 -95
- data/test/config/environments/test.rb +0 -42
- data/test/config/initializers/backtrace_silencers.rb +0 -7
- data/test/config/initializers/devise.rb +0 -254
- data/test/config/initializers/filter_parameter_logging.rb +0 -4
- data/test/config/initializers/inflections.rb +0 -16
- data/test/config/initializers/milia.rb +0 -51
- data/test/config/initializers/mime_types.rb +0 -5
- data/test/config/initializers/secret_token.rb +0 -12
- data/test/config/initializers/session_store.rb +0 -3
- data/test/config/initializers/wrap_parameters.rb +0 -14
- data/test/config/locales/en.yml +0 -23
- data/test/config/routes.rb +0 -77
- data/test/db/migrate/20111012050200_add_sessions_table.rb +0 -12
- data/test/db/migrate/20111012050340_devise_create_users.rb +0 -48
- data/test/db/migrate/20111012050532_create_tenants.rb +0 -11
- data/test/db/migrate/20111012050600_create_tenants_users_join_table.rb +0 -8
- data/test/db/migrate/20111012050650_create_members.rb +0 -12
- data/test/db/migrate/20111012231923_create_posts.rb +0 -12
- data/test/db/migrate/20111013050657_create_zines.rb +0 -10
- data/test/db/migrate/20111013050753_create_teams.rb +0 -10
- data/test/db/migrate/20111013050837_create_team_assets.rb +0 -11
- data/test/db/schema.rb +0 -126
- data/test/db/seeds.rb +0 -7
- data/test/test/controllers/home_controller_test.rb +0 -132
- data/test/test/ctlr_test_helper.rb +0 -11
- data/test/test/fixtures/members.yml +0 -35
- data/test/test/fixtures/posts.yml +0 -96
- data/test/test/fixtures/team_assets.yml +0 -30
- data/test/test/fixtures/teams.yml +0 -17
- data/test/test/fixtures/tenants.yml +0 -12
- data/test/test/fixtures/tenants_users.yml +0 -15
- data/test/test/fixtures/users.yml +0 -33
- data/test/test/fixtures/zines.yml +0 -25
- data/test/test/models/member_test.rb +0 -75
- data/test/test/models/post_test.rb +0 -66
- data/test/test/models/team_test.rb +0 -49
- data/test/test/models/tenant_test.rb +0 -228
- data/test/test/models/user_test.rb +0 -182
- data/test/test/models/zine_test.rb +0 -40
- data/test/test/test_helper.rb +0 -31
data/doc/ref_notes.txt
DELETED
@@ -1,155 +0,0 @@
|
|
1
|
-
DEFAULT_SCOPE RAILS 3.1 (from https://gist.github.com/958338)
|
2
|
-
================================================================================
|
3
|
-
default_scope can take a block, lambda, or any other object which responds
|
4
|
-
to call for lazy evaluation:
|
5
|
-
|
6
|
-
default_scope { ... }
|
7
|
-
default_scope lambda { ... }
|
8
|
-
default_scope method(:foo)
|
9
|
-
|
10
|
-
This feature was originally implemented by Tim Morgan, but was then removed in
|
11
|
-
favour of defining a default_scope class method,
|
12
|
-
but has now been added back in by Jon Leighton.
|
13
|
-
The relevant lighthouse ticket is #1812.
|
14
|
-
|
15
|
-
Default scopes are now evaluated at the latest possible moment,
|
16
|
-
to avoid problems where scopes would be created which would implicitly contain
|
17
|
-
the default scope, which would then be impossible to get rid of via
|
18
|
-
Model.unscoped.
|
19
|
-
No
|
20
|
-
te that this means that if you are inspecting the internal structure of an
|
21
|
-
ActiveRecord::Relation, it will not contain the default scope, though the
|
22
|
-
resulting query will do. You can get a relation containing the default scope by
|
23
|
-
calling ActiveRecord#with_default_scope, though this is not part of the public API.
|
24
|
-
|
25
|
-
Calling default_scope multiple times in a class
|
26
|
-
(including when a superclass calls default_scope) is deprecated.
|
27
|
-
The current behavior is that this will merge the default scopes together:
|
28
|
-
|
29
|
-
class Post < ActiveRecord::Base # Rails 3.1
|
30
|
-
default_scope where(:published => true)
|
31
|
-
default_scope where(:hidden => false)
|
32
|
-
# The default scope is now: where(:published => true, :hidden => false)
|
33
|
-
end
|
34
|
-
|
35
|
-
In Rails 3.2, the behavior will be changed to overwrite previous scopes:
|
36
|
-
|
37
|
-
class Post < ActiveRecord::Base # Rails 3.2
|
38
|
-
default_scope where(:published => true)
|
39
|
-
default_scope where(:hidden => false)
|
40
|
-
# The default scope is now: where(:hidden => false)
|
41
|
-
end
|
42
|
-
If you wish to merge default scopes in special ways, it is recommended to define
|
43
|
-
your default scope as a class method and use the standard techniques for
|
44
|
-
sharing code (inheritance, mixins, etc.):
|
45
|
-
|
46
|
-
class Post < ActiveRecord::Base
|
47
|
-
def self.default_scope
|
48
|
-
where(:published => true).where(:hidden => false)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
http://samuel.kadolph.com/2010/12/simple-rails-multi-tenancy/
|
53
|
-
===================================================================
|
54
|
-
class Tenant < ActiveRecord::Base
|
55
|
-
class << self
|
56
|
-
def current
|
57
|
-
Thread.current[:current_tenant]
|
58
|
-
end
|
59
|
-
|
60
|
-
def current=(tenant)
|
61
|
-
Thread.current[:current_tenant] = tenant
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
app/models/tenant_scoped_model.rb
|
67
|
-
class TenantScopedModel < ActiveRecord::Base
|
68
|
-
self.abstract_class = true
|
69
|
-
|
70
|
-
class << self
|
71
|
-
protected
|
72
|
-
def current_scoped_methods
|
73
|
-
last = scoped_methods.last
|
74
|
-
last.respond_to?(:call) ? relation.scoping { last.call } : last
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
belongs_to :tenant
|
79
|
-
|
80
|
-
default_scope lambda { where('tenant_id = ?', Tenant.current) }
|
81
|
-
|
82
|
-
before_save { self.tenant = Tenant.current }
|
83
|
-
end
|
84
|
-
|
85
|
-
class ApplicationController < ActionController::Base
|
86
|
-
before_filter do
|
87
|
-
@tenant = Tenant.current = Tenant.find_by_host!(request.host)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
Caveats
|
92
|
-
|
93
|
-
Calling unscoped bypasses the default_scope; this is both good and bad because you can get all partitioned data from a model regardless of the current tenant.
|
94
|
-
You will get errors in the console when working with a scoped model unless you set Tenant.current.
|
95
|
-
before_save { self.tenant = Tenant.current } is necessary because rails does not automatically set the attributes from our default_scope because it is a lambda.
|
96
|
-
|
97
|
-
|
98
|
-
http://www.justinball.com/2011/09/27/customizing-views-for-a-multi-tenant-application-using-ruby-on-rails-custom-resolvers/
|
99
|
-
===============================================================================
|
100
|
-
but setting a global on the current thread felt like a big hack. (Here's a good article on Thread.current ) Lucky for me Jose was willing to spend a little time working with me and the resulting code works without globals. Instead of passing a global around we removed the Singleton code from the resolver and create an instance of the resolver per each account:
|
101
|
-
|
102
|
-
|
103
|
-
class ApplicationController < ActionController::Base
|
104
|
-
before_filter :set_resolver
|
105
|
-
|
106
|
-
def current_account
|
107
|
-
@current_account ||= Account.find_by_domain(request.host) || Account.find_by_code(request.subdomains.first) || Account.first
|
108
|
-
end
|
109
|
-
|
110
|
-
@@account_resolver = {}
|
111
|
-
|
112
|
-
def account_resolver_for(account)
|
113
|
-
@@account_resolver[account.id] ||= CustomView::Resolver.new(account)
|
114
|
-
end
|
115
|
-
|
116
|
-
def set_resolver
|
117
|
-
return unless current_account
|
118
|
-
resolver = account_resolver_for(current_account)
|
119
|
-
resolver.update_account(current_account)
|
120
|
-
prepend_view_path resolver
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
124
|
-
class Resolver < ActionView::Resolver
|
125
|
-
|
126
|
-
def initialize(account)
|
127
|
-
@account = account
|
128
|
-
end
|
129
|
-
|
130
|
-
# Check if the custom_view_cache_count is still the same, if not clear the cache
|
131
|
-
def update_account(updated_account)
|
132
|
-
self.clear_cache unless @account.custom_view_cache_count == updated_account.custom_view_cache_count
|
133
|
-
@account = updated_account
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
POSTGRES RULES
|
138
|
-
===============================================================================
|
139
|
-
36.2. Views and the Rule System
|
140
|
-
Views in PostgreSQL are implemented using the rule system.
|
141
|
-
In fact, there is essentially no difference between:
|
142
|
-
|
143
|
-
CREATE VIEW myview AS SELECT * FROM mytab;
|
144
|
-
|
145
|
-
compared against the two commands:
|
146
|
-
|
147
|
-
CREATE TABLE myview (same column list as mytab);
|
148
|
-
CREATE RULE "_RETURN" AS ON SELECT TO myview DO INSTEAD
|
149
|
-
SELECT * FROM mytab;
|
150
|
-
|
151
|
-
because this is exactly what the CREATE VIEW command does internally.
|
152
|
-
This has some side effects. One of them is that the information about a view
|
153
|
-
in the PostgreSQL system catalogs is exactly the same as it is for a table.
|
154
|
-
So for the parser, there is absolutely no difference between a table and a view.
|
155
|
-
They are the same thing: relations.
|
data/doc/sample.sh
DELETED
@@ -1,276 +0,0 @@
|
|
1
|
-
# *********************************************************************
|
2
|
-
# HOW TO SET IT UP -- sample-milia-app
|
3
|
-
# *********************************************************************
|
4
|
-
# This is how to get a working app using rails/milia/devise
|
5
|
-
# together with a simple but attractive web-app-theme.
|
6
|
-
# I have added generators which automate all of the steps listed in
|
7
|
-
# manual_sample.sh (if you want to see the details).
|
8
|
-
# It is based on my dev environment which is Ubuntu 13.10 on a PC. YMMV.
|
9
|
-
#
|
10
|
-
# The "app" itself is merely a simple barebones structure to display
|
11
|
-
# an index page, require sign-in to do anything else, has a sign-up
|
12
|
-
# page for starting a new organization (ie tenant), a way to send
|
13
|
-
# invitations to other members, and a single tenanted model to prove
|
14
|
-
# that tenanting is working.
|
15
|
-
#
|
16
|
-
# you can see an exact copy of the sample on github:
|
17
|
-
# https://github.com/dsaronin/sample-milia-app
|
18
|
-
#
|
19
|
-
# *********************************************************************
|
20
|
-
# RESOURCES
|
21
|
-
# *********************************************************************
|
22
|
-
# doc/sample.sh -- this document will ALWAYS be the most recent
|
23
|
-
# (for example in the edge branch: "newdev")
|
24
|
-
# doc/manual_sample.sh -- step-by-step instructions WITHOUT the generators.
|
25
|
-
#
|
26
|
-
# github.com/milia/wiki/sample-milia-app-tutorial
|
27
|
-
# this should be the same as the sample.sh doc for the current
|
28
|
-
# stable release (or last beta version); but markdown formatted
|
29
|
-
# https://github.com/dsaronin/milia/wiki/sample-milia-app-tutorial
|
30
|
-
# milia README:
|
31
|
-
# this will be the knowledgable programmer's digest of the essentials
|
32
|
-
# and thus it won't cover some of the intricacies of actually
|
33
|
-
# implementing milia: either the tutorial or sample.sh will do that
|
34
|
-
#
|
35
|
-
# *********************************************************************
|
36
|
-
# FEEDBACK
|
37
|
-
# *********************************************************************
|
38
|
-
# If you run into difficulties while following the steps here,
|
39
|
-
# please be sure to reference the LINE NUMBER of the point at which
|
40
|
-
# had a problem, as well as any output from that step.
|
41
|
-
# BUT (caveat)
|
42
|
-
# if you've gone commando and been making changes & enhancements OR
|
43
|
-
# have been trying to roll out a full app, you're more or less on your
|
44
|
-
# own. I strongly recommend experimenting with milia first in this
|
45
|
-
# simple format, get it working, then ADD in increasing layers of
|
46
|
-
# complexity and difficulty. Trying to make too many changes at once
|
47
|
-
# is a recipe for difficulty in troubleshooting.
|
48
|
-
# *********************************************************************
|
49
|
-
# NOTES
|
50
|
-
# *********************************************************************
|
51
|
-
# Although this file has a ".sh" extension, it isn't fully executable
|
52
|
-
# as a shell script. There are just too many things you'll have to
|
53
|
-
# to do to help things along.
|
54
|
-
# 1. follow everything exactly in the order given
|
55
|
-
# 2. there's non-milia related stuff if you'll be using heroku to host
|
56
|
-
# treat this as optional, if you'd like. but at least I know it
|
57
|
-
# works as a completed app.
|
58
|
-
# *********************************************************************
|
59
|
-
|
60
|
-
# *********************************************************************
|
61
|
-
# STEP 0 - PREREQUISITES & EXPECTED BACKGROUND PREPARATION
|
62
|
-
# *********************************************************************
|
63
|
-
|
64
|
-
# This background is what I've done on my Ubuntu dev workstation
|
65
|
-
# so if you want to follow exactly, you'll need a similar setup.
|
66
|
-
# None of this is required for milia, only to bring up this
|
67
|
-
# sample-milia-app.
|
68
|
-
|
69
|
-
# make sure you have your ssh keys gen'd
|
70
|
-
$ ssh-keygen
|
71
|
-
|
72
|
-
# make sure you have some basic packages on your system
|
73
|
-
$ sudo apt-get install curl git vim vim-gnome
|
74
|
-
|
75
|
-
# make sure you've set up a github account, and git globals
|
76
|
-
|
77
|
-
# Install RVM on your system; see rvm.io for more information
|
78
|
-
$ \curl -L https://get.rvm.io | bash -s stable
|
79
|
-
# do any adjustments to your .bashrc, etc files as needed
|
80
|
-
|
81
|
-
# make sure to install ruby 2.1.3
|
82
|
-
$ rvm install 2.1.3
|
83
|
-
|
84
|
-
# I have all my projects in a directory called "projectspace'
|
85
|
-
$ mkdir projectspace
|
86
|
-
$ rvm gemset create projectspace
|
87
|
-
$ echo "projectspace" > projectspace/.ruby-gemset
|
88
|
-
$ echo "2.1.3" > projectspace/.ruby-version
|
89
|
-
$ cd projectspace
|
90
|
-
|
91
|
-
# install rails (latest version)
|
92
|
-
$ gem install rails
|
93
|
-
|
94
|
-
# OPTIONAL -- get ready for heroku
|
95
|
-
# set up a heroku account at: heroku.com
|
96
|
-
# install heroku toolbelt: heroku, foreman
|
97
|
-
$ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
|
98
|
-
$ heroku login
|
99
|
-
|
100
|
-
# set environment variable for later Procfile and later recaptcha
|
101
|
-
# I put them in .bashrc
|
102
|
-
export PORT=3000
|
103
|
-
export RACK_ENV=development
|
104
|
-
export SMTP_ENTRY=<my smtp password>
|
105
|
-
# OPTIONAL: recaptcha keys
|
106
|
-
export RECAPTCHA_PUBLIC_KEY=6LeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKpT
|
107
|
-
export RECAPTCHA_PRIVATE_KEY=6LeBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBgQBv
|
108
|
-
|
109
|
-
|
110
|
-
# *********************************************************************
|
111
|
-
# STEP 1 - CREATION OF SKELETON APP & REPOSITORY
|
112
|
-
# *********************************************************************
|
113
|
-
|
114
|
-
# GITHUB: create a new repository <your-new-app> for <git-user> (you)
|
115
|
-
# anywhere below where you see "sample-milia-app", change it to <your-new-app>
|
116
|
-
|
117
|
-
$ cd projectspace # if not there already
|
118
|
-
|
119
|
-
$ rails new sample-milia-app --skip-bundle
|
120
|
-
$ echo "sample-milia-app" > sample-milia-app/.ruby-gemset
|
121
|
-
$ echo "2.1.3" > sample-milia-app/.ruby-version
|
122
|
-
$ echo "web: bundle exec thin start -R config.ru -p $PORT -e $RACK_ENV" > sample-milia-app/Procfile
|
123
|
-
$ rvm gemset create sample-milia-app
|
124
|
-
$ cd sample-milia-app
|
125
|
-
|
126
|
-
# change .gitignore to match your development environment
|
127
|
-
# I just copy my standard .gitignore from another project
|
128
|
-
# but you can copy mine from sample-milia-app on github.
|
129
|
-
$ cp ../<an existing project>/.gitignore .
|
130
|
-
|
131
|
-
$ git init
|
132
|
-
$ git add --all .
|
133
|
-
$ git commit -am 'initial commit'
|
134
|
-
$ git remote add origin git@github.com:<git-user>/sample-milia-app.git
|
135
|
-
$ git push -u origin master
|
136
|
-
|
137
|
-
# *********************************************************************
|
138
|
-
# STEP 2 - SET UP GEMFILE, BUNDLE INSTALL GEMS
|
139
|
-
# *********************************************************************
|
140
|
-
|
141
|
-
# EDIT Gemfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
142
|
-
$ vim Gemfile
|
143
|
-
|
144
|
-
# First, comment OUT the turbolinks gem
|
145
|
-
# gem 'turbolinks'
|
146
|
-
|
147
|
-
# then, enable rubyracer in Gemfile by de-commenting
|
148
|
-
gem 'therubyracer', platforms: :ruby
|
149
|
-
|
150
|
-
# finally, ADD the following lines to Gemfile >>>>>>>>>>>>>>>>>>>>>>
|
151
|
-
|
152
|
-
ruby "2.1.3" # heroku likes this at the head, as line 2
|
153
|
-
|
154
|
-
# =========================================================
|
155
|
-
# sample-milia-app specific stuff
|
156
|
-
# =========================================================
|
157
|
-
# Bundle the extra gems:
|
158
|
-
gem 'haml-rails'
|
159
|
-
gem 'html2haml', :git => 'git://github.com/haml/html2haml.git' # "2.0.0.beta.2",
|
160
|
-
|
161
|
-
# stuff that heroku likes to have
|
162
|
-
gem 'thin'
|
163
|
-
gem "SystemTimer", :require => "system_timer", :platforms => :ruby_18
|
164
|
-
gem "rack-timeout"
|
165
|
-
gem 'rails_12factor'
|
166
|
-
|
167
|
-
# airbrake is optional and configured by config.use_airbrake in milia initializer
|
168
|
-
# default is false; if you change it to true, uncomment out the line below
|
169
|
-
# gem 'airbrake' # uncomment this if you will use airbrake for exception notifications
|
170
|
-
|
171
|
-
gem 'web-app-theme', :git => 'git://github.com/dsaronin/web-app-theme.git'
|
172
|
-
gem 'devise', '~>3.2'
|
173
|
-
gem 'milia', :git => 'git://github.com/dsaronin/milia.git', :branch => 'v1.0.0-beta-7'
|
174
|
-
|
175
|
-
#<<<< ADD <<<<<<<<<<<<<<<<<
|
176
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
177
|
-
|
178
|
-
# EDIT: app/assets/javascripts/application.js >>>>>>>>>>>>>>>>>>>>>>>>
|
179
|
-
# comment out turbolinks in your Javascript manifest file
|
180
|
-
# we won't need turbolinks for this simple sample.
|
181
|
-
// require turbolinks
|
182
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
183
|
-
|
184
|
-
# BUNDLE install all the gems
|
185
|
-
$ bundle install
|
186
|
-
|
187
|
-
|
188
|
-
# *********************************************************************
|
189
|
-
# STEP 3 - INSTALL milia (and automatically, devise), and app framework
|
190
|
-
# *********************************************************************
|
191
|
-
$ rails g milia:install --org_email='<your smtp email for dev work>'
|
192
|
-
$ rails g web_app_theme:milia
|
193
|
-
|
194
|
-
# to be able to receive the confirmation & activation emails,
|
195
|
-
# you will need to complete entering in your email and smtp
|
196
|
-
# information in the following places:
|
197
|
-
# config/environments/development.rb
|
198
|
-
# config/environments/production.rb
|
199
|
-
|
200
|
-
# create the database
|
201
|
-
$ rake db:create
|
202
|
-
$ rake db:migrate
|
203
|
-
|
204
|
-
# test by starting server:
|
205
|
-
$ foreman start
|
206
|
-
|
207
|
-
# *********************************************************************
|
208
|
-
# STEP 4 - TEST SIGN UP, ACTIVATION, SIGN IN, SIGN OUT
|
209
|
-
# *********************************************************************
|
210
|
-
# CHECK-OUT: at your browser:
|
211
|
-
http://localhost:3000/
|
212
|
-
|
213
|
-
# sign up as a new user,
|
214
|
-
# the log file will show that an email was sent
|
215
|
-
# together with the activation code & URL
|
216
|
-
# and if your email/password are correct, an email should have been sent as well!
|
217
|
-
# copy & paste this address as-is into the browser address area & go to it to activate
|
218
|
-
# it will take you to a sign in screen; sign in
|
219
|
-
# REFRESH index page (to refresh the logout validity token)
|
220
|
-
# sign out
|
221
|
-
# sign in again as the user
|
222
|
-
# you will have to first sign-up, confirm, then you can invite_member
|
223
|
-
# sign-out, confirm new member, etc
|
224
|
-
|
225
|
-
# stop/restart foreman
|
226
|
-
# ^c stops foreman; foreman start restarts it; F5 refreshes the browser page
|
227
|
-
#
|
228
|
-
# *********************************************************************
|
229
|
-
# STEP 5 - DEPLOYING SAMPLE-MILIA-APP TO HEROKU
|
230
|
-
# *********************************************************************
|
231
|
-
|
232
|
-
# Make sure that you've installed the heroku toolbelt, as shown in STEP 0.
|
233
|
-
# Make sure that you've setup git repository for you app, as shown in STEP 1.
|
234
|
-
# Open a terminal window and make sure you've cd to your project within the projectspace.
|
235
|
-
# Make sure that you've setup your heroku credentials on your machine using
|
236
|
-
$ heroku login
|
237
|
-
|
238
|
-
# Create your project (we'll call it "sample-milia" in the examples here).
|
239
|
-
$ heroku create sample-milia
|
240
|
-
|
241
|
-
# Now setup the various add-ons we'll need:
|
242
|
-
$ heroku addons:add sendgrid
|
243
|
-
|
244
|
-
# Now setup any needed configurations variables
|
245
|
-
$ heroku config:add BUNDLE_WITHOUT="development:test:linux:mac"
|
246
|
-
$ heroku config:add RECAPTCHA_PUBLIC_KEY='<your public key>'
|
247
|
-
$ heroku config:add RECAPTCHA_PRIVATE_KEY='<your private key>'
|
248
|
-
|
249
|
-
# edit config/initializers/secret_token.rb
|
250
|
-
# duplicate the secret_key_base line and rename it to secret_token
|
251
|
-
|
252
|
-
# edit config/environments/production.rb line 4
|
253
|
-
# put in the correct path for the hostname, and remove the https protocol if not needed
|
254
|
-
|
255
|
-
# edit Gemfile and replace the sqlite3 line with the following:
|
256
|
-
# Use sqlite3 as the dev/test database for Active Record
|
257
|
-
gem 'sqlite3', :group => [:development, :test]
|
258
|
-
|
259
|
-
# Use pg as the production database for heroku
|
260
|
-
gem 'pg', :group => :production
|
261
|
-
|
262
|
-
# then run bundle install, and commit to the repository
|
263
|
-
$ bundle install
|
264
|
-
$ git commit -am 'ready for heroku deploy'; git push origin master
|
265
|
-
|
266
|
-
# now deploy to heroku
|
267
|
-
$ git push heroku master
|
268
|
-
|
269
|
-
# now migrate the database
|
270
|
-
$ heroku run rake db:migrate
|
271
|
-
$ heroku restart
|
272
|
-
|
273
|
-
# go to browser and put in the correct address for your app on heroku:
|
274
|
-
|
275
|
-
http://sample-milia.herokuapp.com
|
276
|
-
|
data/markdown.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'redcarpet'
|
5
|
-
|
6
|
-
class ShowMd
|
7
|
-
|
8
|
-
TEMPFILE = "/tmp/markdown.html"
|
9
|
-
|
10
|
-
def initialize( file )
|
11
|
-
@body = IO.read( file )
|
12
|
-
end
|
13
|
-
|
14
|
-
def markdown
|
15
|
-
options = [ :autolink, :no_intraemphasis, :fenced_code, :gh_blockcode]
|
16
|
-
|
17
|
-
File.open( TEMPFILE, "w" ) do |file|
|
18
|
-
file.write( RedcarpetCompat.new( @body, *options).to_html )
|
19
|
-
end # do file
|
20
|
-
end
|
21
|
-
|
22
|
-
def show
|
23
|
-
system("chromium-browser #{TEMPFILE} &")
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
|
-
end # class
|
28
|
-
|
29
|
-
md = ShowMd.new( ARGV[0] )
|
30
|
-
md.markdown
|
31
|
-
md.show
|
32
|
-
|
33
|
-
# puts RedcarpetCompat.new(ARGF.read,
|
34
|
-
# :fenced_code,
|
35
|
-
# :hard_wrap,
|
36
|
-
# :filter_html,
|
37
|
-
# :smart).to_html
|
38
|
-
|