firebolt 0.9.0 → 0.9.1
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.
- data/README.md +49 -7
- data/lib/firebolt/railtie.rb +23 -0
- data/lib/firebolt/version.rb +1 -1
- data/lib/firebolt.rb +6 -4
- metadata +5 -4
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Firebolt
|
2
2
|
|
3
|
-
Firebolt is a simple cache warmer. It warms the cache using a specially defined warmer class. It also has an optional file-based warmer
|
3
|
+
Firebolt is a simple cache warmer. It warms the cache using a specially defined warmer class. It also has an optional file-based warmer to make boot-time fast!
|
4
4
|
|
5
5
|
It's not quite ready for Prime Time™ and needs specs (YIKES!). Feel free add some, if you like...
|
6
6
|
|
@@ -20,16 +20,50 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
To use Firebolt, you first need to configure it
|
23
|
+
To use Firebolt, you first need to configure it.
|
24
|
+
|
25
|
+
#### Configure & Initialize!
|
26
|
+
|
27
|
+
```Ruby
|
28
|
+
::Firebolt.configure do |config|
|
29
|
+
# Required
|
30
|
+
config.cache = ::Rails.cache # Or anything that adheres to Rails's cache interface
|
31
|
+
config.warming_frequency = 12.hours # In seconds. Get minutes/hours/days helper w/ ActiveSupport
|
32
|
+
config.warmer = ::YourAwesomeCacheWarmer
|
33
|
+
|
34
|
+
# Optional
|
35
|
+
config.cache_file_enabled = true # Automatically enabled when cache_file_path is set
|
36
|
+
config.cache_file_path = '/path/to/your/project/tmp' # Defaults to /tmp
|
37
|
+
end
|
38
|
+
```
|
39
|
+
|
40
|
+
Then you need to initialize it:
|
24
41
|
|
25
42
|
```Ruby
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
43
|
+
# Calling initialize! starts the warming cycle.
|
44
|
+
# It's best to skip the warming cycle while running specs. Warming is
|
45
|
+
# automatically skipped while running specs in Rails apps. In other apps, set
|
46
|
+
# FIREBOLT_SKIP_WARMING to true (or 1, or 'sandwich').
|
47
|
+
::Firebolt.initialize!
|
48
|
+
|
49
|
+
# Also takes a block so you can initialize and configure at the same time:
|
50
|
+
::Firebolt.initialize! do |config|
|
51
|
+
config.cache = ::Rails.cache
|
52
|
+
config.warming_frequency = 12.hours
|
53
|
+
config.warmer = ::YourAwesomeCacheWarmer
|
30
54
|
end
|
31
55
|
```
|
32
56
|
|
57
|
+
#### Reading cached data
|
58
|
+
|
59
|
+
Firebolt provides two methods for retrieving cached data: `Firebolt.read` & `Firebolt.fetch`.
|
60
|
+
|
61
|
+
`Firebolt.read` takes your cache key and return the value from the cache.
|
62
|
+
|
63
|
+
`Firebolt.fetch` does the same thing, but also takes an optional block that is called when there is a cache miss.
|
64
|
+
|
65
|
+
#### Warming the cache
|
66
|
+
|
33
67
|
Firebolt uses a cache warmer that you create. Valid cache warmers must:
|
34
68
|
|
35
69
|
1. Include `Firebolt::Warmer`
|
@@ -47,7 +81,15 @@ class YourAwesomeCacheWarmer
|
|
47
81
|
end
|
48
82
|
```
|
49
83
|
|
50
|
-
|
84
|
+
Firebolt uses this warmer to re-warm the cache at the frequency you configure (e.g. `config.warming_frequency`). If it's set to re-warm every 12 hours, Firebolt will warm the cache every twelve hours.
|
85
|
+
|
86
|
+
Under the hood, Firebolt keeps track of the current cache set. That way, it's able to warm a new cache set and swap it with the old cache set in place, avoiding cache misses.
|
87
|
+
|
88
|
+
#### The file warmer
|
89
|
+
|
90
|
+
Firebolt is built to be fast and unobtrusive, but sometimes warming a cache can take some time. That's where the file warmer comes in. When the file warmer is enabled, after warming the cache, Firebolt will write the cached data to a file. The next time your app starts up, it will warm the cache from the file. Each subsequent warming happens with your custom warmer.
|
91
|
+
|
92
|
+
To use file warmer, simply set the `cache_file_enabled` and `cache_file_path` config options.
|
51
93
|
|
52
94
|
## Contributing
|
53
95
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Firebolt
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
initializer "firebolt.rails.configuration" do |app|
|
4
|
+
# Configure Firebolt
|
5
|
+
::Firebolt.configure do |config|
|
6
|
+
app.config.firebolt.each do |config_key, config_value|
|
7
|
+
config_setter = "#{config_key}="
|
8
|
+
config.__send__(config_setter, config_value) if config.respond_to?(config_setter)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Set defaults based on Rails
|
12
|
+
config.cache ||= ::Rails.cache
|
13
|
+
config.cache_file_path ||= ::File.join(::Rails.root, 'tmp')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Load Firebolt Rake tasks
|
18
|
+
rake_tasks do
|
19
|
+
# load 'firebolt/tasks/cache.rake'
|
20
|
+
load ::File.join('firebolt', 'tasks', 'cache.rake')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/firebolt/version.rb
CHANGED
data/lib/firebolt.rb
CHANGED
@@ -9,9 +9,10 @@ require "firebolt/cache_worker"
|
|
9
9
|
require "firebolt/config"
|
10
10
|
require "firebolt/warmer"
|
11
11
|
require "firebolt/file_warmer"
|
12
|
-
|
13
12
|
require "firebolt/version"
|
14
13
|
|
14
|
+
require "firebolt/railtie" if defined?(::Rails::Railtie)
|
15
|
+
|
15
16
|
module Firebolt
|
16
17
|
extend ::Firebolt::Cache
|
17
18
|
|
@@ -41,9 +42,11 @@ module Firebolt
|
|
41
42
|
end
|
42
43
|
|
43
44
|
def self.initialize_rufus_scheduler
|
44
|
-
|
45
|
+
return if config.warming_frequency.nil?
|
46
|
+
|
47
|
+
warming_frequency = ::Rufus.to_time_string(config.warming_frequency)
|
45
48
|
|
46
|
-
::Rufus::Scheduler.start_new.every(
|
49
|
+
::Rufus::Scheduler.start_new.every(warming_frequency) do
|
47
50
|
::SuckerPunch::Queue[:firebolt_queue].async.perform(config.warmer)
|
48
51
|
end
|
49
52
|
end
|
@@ -55,7 +58,6 @@ module Firebolt
|
|
55
58
|
|
56
59
|
raise "Firebolt.config.cache has not been set" unless config.cache
|
57
60
|
raise "Firebolt.config.warmer has not been set" unless config.warmer
|
58
|
-
raise "Firebolt.config.warming_frequency has not been set" unless config.warming_frequency
|
59
61
|
|
60
62
|
configure_sucker_punch
|
61
63
|
initialize_rufus_scheduler
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: firebolt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- lib/firebolt/config.rb
|
97
97
|
- lib/firebolt/file_warmer.rb
|
98
98
|
- lib/firebolt/keys.rb
|
99
|
+
- lib/firebolt/railtie.rb
|
99
100
|
- lib/firebolt/tasks/cache.rake
|
100
101
|
- lib/firebolt/version.rb
|
101
102
|
- lib/firebolt/warmer.rb
|
@@ -114,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
114
115
|
version: '0'
|
115
116
|
segments:
|
116
117
|
- 0
|
117
|
-
hash:
|
118
|
+
hash: 553194532783204057
|
118
119
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
120
|
none: false
|
120
121
|
requirements:
|
@@ -123,10 +124,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
124
|
version: '0'
|
124
125
|
segments:
|
125
126
|
- 0
|
126
|
-
hash:
|
127
|
+
hash: 553194532783204057
|
127
128
|
requirements: []
|
128
129
|
rubyforge_project:
|
129
|
-
rubygems_version: 1.8.
|
130
|
+
rubygems_version: 1.8.25
|
130
131
|
signing_key:
|
131
132
|
specification_version: 3
|
132
133
|
summary: Firebolt is a simple cache warmer. It warms the cache using a specially defined
|