-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
rails3.rb
119 lines (105 loc) · 3.48 KB
/
rails3.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
require "language_pack"
require "language_pack/rails2"
# Rails 3 Language Pack. This is for all Rails 3.x apps.
class LanguagePack::Rails3 < LanguagePack::Rails2
# detects if this is a Rails 3.x app
# @return [Boolean] true if it's a Rails 3.x app
def self.use?
instrument "rails3.use" do
rails_version = bundler.gem_version('railties')
return false unless rails_version
is_rails3 = rails_version >= Gem::Version.new('3.0.0') &&
rails_version < Gem::Version.new('4.0.0')
return is_rails3
end
end
def name
"Ruby/Rails"
end
def default_process_types
instrument "rails3.default_process_types" do
# let's special case thin here
web_process = bundler.has_gem?("thin") ?
"bundle exec thin start -R config.ru -e $RAILS_ENV -p $PORT" :
"bundle exec rails server -p $PORT"
super.merge({
"web" => web_process,
"console" => "bundle exec rails console"
})
end
end
def compile
instrument "rails3.compile" do
super
end
end
private
def install_plugins
instrument "rails3.install_plugins" do
return false if bundler.has_gem?('rails_12factor')
plugins = {"rails_log_stdout" => "rails_stdout_logging", "rails3_serve_static_assets" => "rails_serve_static_assets" }.
reject { |plugin, gem| bundler.has_gem?(gem) }
return false if plugins.empty?
plugins.each do |plugin, gem|
warn "Injecting plugin '#{plugin}'"
end
warn "Add 'rails_12factor' gem to your Gemfile to skip plugin injection"
LanguagePack::Helpers::PluginsInstaller.new(plugins.keys).install
end
end
# runs the tasks for the Rails 3.1 asset pipeline
def run_assets_precompile_rake_task
instrument "rails3.run_assets_precompile_rake_task" do
log("assets_precompile") do
if File.exists?("public/assets/manifest.yml")
puts "Detected manifest.yml, assuming assets were compiled locally"
return true
end
precompile = rake.task("assets:precompile")
return true unless precompile.is_defined?
topic("Preparing app for Rails asset pipeline")
precompile.invoke(env: rake_env)
if precompile.success?
log "assets_precompile", :status => "success"
puts "Asset precompilation completed (#{"%.2f" % precompile.time}s)"
else
precompile_fail(precompile.output)
end
end
end
end
def rake_env
if user_env_hash.empty?
default_env = {
"RAILS_GROUPS" => ENV["RAILS_GROUPS"] || "assets",
"RAILS_ENV" => ENV["RAILS_ENV"] || "production",
"DATABASE_URL" => database_url
}
else
default_env = {
"RAILS_GROUPS" => "assets",
"RAILS_ENV" => "production",
"DATABASE_URL" => database_url
}
end
default_env.merge(user_env_hash)
end
# generate a dummy database_url
def database_url
instrument "rails3.setup_database_url_env" do
# need to use a dummy DATABASE_URL here, so rails can load the environment
return env("DATABASE_URL") if env("DATABASE_URL")
scheme =
if bundler.has_gem?("pg") || bundler.has_gem?("jdbc-postgres")
"postgres"
elsif bundler.has_gem?("mysql")
"mysql"
elsif bundler.has_gem?("mysql2")
"mysql2"
elsif bundler.has_gem?("sqlite3") || bundler.has_gem?("sqlite3-ruby")
"sqlite3"
end
"#{scheme}://user:pass@127.0.0.1/dbname"
end
end
end