sails 0.1.0 → 0.1.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.
- checksums.yaml +4 -4
 - data/.travis.yml +6 -0
 - data/CHANGELOG.md +13 -0
 - data/Gemfile +1 -0
 - data/Gemfile.lock +3 -1
 - data/README.md +49 -3
 - data/lib/sails/base.rb +159 -53
 - data/lib/sails/cli.rb +24 -74
 - data/lib/sails/config.rb +25 -0
 - data/lib/sails/console.rb +44 -0
 - data/lib/sails/daemon.rb +103 -0
 - data/lib/sails/service/base.rb +56 -0
 - data/lib/sails/service/exception.rb +22 -0
 - data/lib/sails/service/interface.rb +60 -0
 - data/lib/sails/service.rb +8 -75
 - data/lib/sails/templates/Rakefile.tt +0 -5
 - data/lib/sails/templates/app/services/application_service.rb.tt +5 -3
 - data/lib/sails/templates/config/application.rb.tt +9 -3
 - data/lib/sails/templates/config/environments/development.rb +3 -0
 - data/lib/sails/templates/config/environments/production.rb +3 -0
 - data/lib/sails/templates/config/environments/test.rb +3 -0
 - data/lib/sails/version.rb +1 -1
 - data/lib/sails.rb +38 -5
 - data/sails.gemspec +4 -4
 - data/spec/cli_spec.rb +44 -0
 - data/spec/dummy/log/development.log +27 -0
 - data/spec/rails_spec.rb +5 -0
 - data/spec/sails_spec.rb +70 -0
 - data/spec/service_spec.rb +38 -0
 - data/spec/spec_helper.rb +23 -1
 - metadata +28 -6
 - data/spec/tails_spec.rb +0 -33
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 9910e5d27ef628ca22aec968edd2ed2a94604295
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 6e72d2491ad1950a6a2e6946205a6ac84e266914
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 91c9dc674800da1fcb081bafa44438b5a673f68300df5ddbfdbc207b1c216de6354972a9dcb9866db5af245bf18dbb2d51b983b85c9c89c53e52768116561840
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: df6d3b9110cf3d8c3c71e31ae5c0f0c9e0744b2cd6826dd98517356b0e8b2835637f5565904e186e292aa118d33d8df7d59a7326280ec5ad1e7ee44688cd9c7e
         
     | 
    
        data/.travis.yml
    ADDED
    
    
    
        data/CHANGELOG.md
    ADDED
    
    | 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ## 0.1.1
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            - Add `sails s`, `sails c` commands.
         
     | 
| 
      
 4 
     | 
    
         
            +
            - Refactor service layer, use class to instead module.
         
     | 
| 
      
 5 
     | 
    
         
            +
            - Support to custom Thrift protocol with `config.protocol = :binary`.
         
     | 
| 
      
 6 
     | 
    
         
            +
            - Fix ThriftServer::OperationFailed not found error.
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Implement Master Process to manage and protect Child Process, keep it running/restart/stop, like Unicorn.
         
     | 
| 
      
 8 
     | 
    
         
            +
            - Add Sails.reload! to reload cache classes.
         
     | 
| 
      
 9 
     | 
    
         
            +
            - Sails console start with IRB class, and support `reload!`,`service` methods in console.
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            ## 0.1.0 / 2014-12-9
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            - First version release.
         
     | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/Gemfile.lock
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            PATH
         
     | 
| 
       2 
2 
     | 
    
         
             
              remote: .
         
     | 
| 
       3 
3 
     | 
    
         
             
              specs:
         
     | 
| 
       4 
     | 
    
         
            -
                sails (0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
                sails (0.1.1)
         
     | 
| 
       5 
5 
     | 
    
         
             
                  activesupport (>= 3.2.0)
         
     | 
| 
       6 
6 
     | 
    
         
             
                  thor
         
     | 
| 
       7 
7 
     | 
    
         
             
                  thrift (>= 0.9.0)
         
     | 
| 
         @@ -15,6 +15,7 @@ GEM 
     | 
|
| 
       15 
15 
     | 
    
         
             
                  minitest (~> 5.1)
         
     | 
| 
       16 
16 
     | 
    
         
             
                  thread_safe (~> 0.1)
         
     | 
| 
       17 
17 
     | 
    
         
             
                  tzinfo (~> 1.1)
         
     | 
| 
      
 18 
     | 
    
         
            +
                dalli (2.7.1)
         
     | 
| 
       18 
19 
     | 
    
         
             
                diff-lcs (1.2.5)
         
     | 
| 
       19 
20 
     | 
    
         
             
                i18n (0.6.11)
         
     | 
| 
       20 
21 
     | 
    
         
             
                json (1.8.1)
         
     | 
| 
         @@ -41,5 +42,6 @@ PLATFORMS 
     | 
|
| 
       41 
42 
     | 
    
         
             
              ruby
         
     | 
| 
       42 
43 
     | 
    
         | 
| 
       43 
44 
     | 
    
         
             
            DEPENDENCIES
         
     | 
| 
      
 45 
     | 
    
         
            +
              dalli
         
     | 
| 
       44 
46 
     | 
    
         
             
              rspec
         
     | 
| 
       45 
47 
     | 
    
         
             
              sails!
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -3,17 +3,34 @@ Sails 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            Sails, create [Thrift](thrift.apache.org) app server like Rails.
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
      
 6 
     | 
    
         
            +
            [](https://travis-ci.org/huacnlee/sails) [](http://badge.fury.io/rb/sails)
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            ## Features
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            - Rails style Thrift server;
         
     | 
| 
      
 11 
     | 
    
         
            +
            - Nonblocking mode;
         
     | 
| 
      
 12 
     | 
    
         
            +
            - I18n support;
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
       6 
14 
     | 
    
         
             
            ## Installation
         
     | 
| 
       7 
15 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
            ```
         
     | 
| 
      
 16 
     | 
    
         
            +
            ```bash
         
     | 
| 
       9 
17 
     | 
    
         
             
            $ gem install sails
         
     | 
| 
      
 18 
     | 
    
         
            +
            $ sails -h
         
     | 
| 
      
 19 
     | 
    
         
            +
            ENV: development
         
     | 
| 
      
 20 
     | 
    
         
            +
            Commands:
         
     | 
| 
      
 21 
     | 
    
         
            +
              sails help [COMMAND]  # Describe available commands or one specific command
         
     | 
| 
      
 22 
     | 
    
         
            +
              sails new APP_NAME    # Create a project
         
     | 
| 
      
 23 
     | 
    
         
            +
              sails restart         # Restart Thrift server
         
     | 
| 
      
 24 
     | 
    
         
            +
              sails start           # Start Thrift server
         
     | 
| 
      
 25 
     | 
    
         
            +
              sails stop            # Stop Thrift server
         
     | 
| 
      
 26 
     | 
    
         
            +
              sails version         # Show Sails version
         
     | 
| 
       10 
27 
     | 
    
         
             
            ```
         
     | 
| 
       11 
28 
     | 
    
         | 
| 
       12 
29 
     | 
    
         
             
            ## Usage
         
     | 
| 
       13 
30 
     | 
    
         | 
| 
       14 
31 
     | 
    
         
             
            ### Create new project
         
     | 
| 
       15 
32 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
            ```
         
     | 
| 
      
 33 
     | 
    
         
            +
            ```bash
         
     | 
| 
       17 
34 
     | 
    
         
             
            $ sails new foo
         
     | 
| 
       18 
35 
     | 
    
         
             
            $ cd foo
         
     | 
| 
       19 
36 
     | 
    
         
             
            $ sails start
         
     | 
| 
         @@ -27,7 +44,36 @@ You can edit Thrift IDL in `app_name.thrift`, and then generate it to ruby sourc 
     | 
|
| 
       27 
44 
     | 
    
         
             
            $ rake gen
         
     | 
| 
       28 
45 
     | 
    
         
             
            ```
         
     | 
| 
       29 
46 
     | 
    
         | 
| 
      
 47 
     | 
    
         
            +
            ## Client Connect
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 50 
     | 
    
         
            +
            require "app/services/gen-rb/you_app_name"
         
     | 
| 
      
 51 
     | 
    
         
            +
            @transport ||= Thrift::FramedTransport.new(::Thrift::Socket.new('127.0.0.1', 4000, 10))
         
     | 
| 
      
 52 
     | 
    
         
            +
            @protocol  ||= Thrift::BinaryProtocol.new(@transport)
         
     | 
| 
      
 53 
     | 
    
         
            +
            @client    ||= Thrift::YouAppName::Client.new(@protocol)
         
     | 
| 
      
 54 
     | 
    
         
            +
            @transport.open()
         
     | 
| 
      
 55 
     | 
    
         
            +
            puts @client.ping()
         
     | 
| 
      
 56 
     | 
    
         
            +
            => Ping pong
         
     | 
| 
      
 57 
     | 
    
         
            +
            ```
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            ## Deploy
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            ```
         
     | 
| 
      
 62 
     | 
    
         
            +
            $ sails s --daemon
         
     | 
| 
      
 63 
     | 
    
         
            +
            $ ps aux
         
     | 
| 
      
 64 
     | 
    
         
            +
            jason            2408   0.1  0.2  2648176  13532 s003  S    12:14下午   0:00.02 you_sails_app    
         
     | 
| 
      
 65 
     | 
    
         
            +
            jason            2407   0.0  0.0  2604916   1016 s003  S    12:14下午   0:00.00 you_sails_app [master]
         
     | 
| 
      
 66 
     | 
    
         
            +
            $ sails restart
         
     | 
| 
      
 67 
     | 
    
         
            +
            $ sails stop
         
     | 
| 
      
 68 
     | 
    
         
            +
            ```
         
     | 
| 
       30 
69 
     | 
    
         | 
| 
       31 
70 
     | 
    
         
             
            ## API Documents
         
     | 
| 
       32 
71 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
            http:// 
     | 
| 
      
 72 
     | 
    
         
            +
            http://www.rubydoc.info/github/huacnlee/sails
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            ## TODO
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            - [ ] Reload without restart;
         
     | 
| 
      
 78 
     | 
    
         
            +
            - [ ] Scaffold generator;
         
     | 
| 
      
 79 
     | 
    
         
            +
            - [X] Multi processes;
         
     | 
    
        data/lib/sails/base.rb
    CHANGED
    
    | 
         @@ -1,38 +1,71 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'rubygems'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'bundler/setup'
         
     | 
| 
       3 
     | 
    
         
            -
            require 'active_support/all'
         
     | 
| 
       4 
     | 
    
         
            -
            require 'i18n'
         
     | 
| 
       5 
     | 
    
         
            -
            require 'thrift'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'yaml'
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
1 
     | 
    
         
             
            Bundler.require()
         
     | 
| 
       9 
2 
     | 
    
         | 
| 
       10 
3 
     | 
    
         
             
            module Sails
         
     | 
| 
       11 
4 
     | 
    
         
             
              extend ActiveSupport::Autoload
         
     | 
| 
      
 5 
     | 
    
         
            +
              
         
     | 
| 
      
 6 
     | 
    
         
            +
              autoload :Config
         
     | 
| 
       12 
7 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
               
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
               
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
              # Sails.config
         
     | 
| 
      
 9 
     | 
    
         
            +
              #
         
     | 
| 
      
 10 
     | 
    
         
            +
              # Configs with Sails
         
     | 
| 
      
 11 
     | 
    
         
            +
              # For example:
         
     | 
| 
      
 12 
     | 
    
         
            +
              #
         
     | 
| 
      
 13 
     | 
    
         
            +
              #   Sails.config.app_name
         
     | 
| 
      
 14 
     | 
    
         
            +
              #   # => returns "You App Name"
         
     | 
| 
      
 15 
     | 
    
         
            +
              #
         
     | 
| 
      
 16 
     | 
    
         
            +
              #   Sails.config.autoload_paths
         
     | 
| 
      
 17 
     | 
    
         
            +
              #   # => returns ['app/models','app/models/concerns', 'app/workers', 'app/services'...]
         
     | 
| 
      
 18 
     | 
    
         
            +
              #
         
     | 
| 
      
 19 
     | 
    
         
            +
              #   Sails.config.cache_store = [:dalli_store, '127.0.0.1', { pool_size: 100 }]
         
     | 
| 
      
 20 
     | 
    
         
            +
              #   Sails.config.i18n.default_locale = 'zh-CN'
         
     | 
| 
      
 21 
     | 
    
         
            +
              #
         
     | 
| 
       17 
22 
     | 
    
         
             
              def self.config
         
     | 
| 
       18 
23 
     | 
    
         
             
                return @config if defined?(@config)
         
     | 
| 
       19 
24 
     | 
    
         
             
                @config = Config.new.config
         
     | 
| 
       20 
     | 
    
         
            -
                @config.app_name = "Sails"
         
     | 
| 
       21 
     | 
    
         
            -
                @config.cache_store = [:memory_store]
         
     | 
| 
       22 
     | 
    
         
            -
                @config.autoload_paths = %W(app/models app/models/concerns app/workers app/services app/services/concerns lib)
         
     | 
| 
       23 
     | 
    
         
            -
                @config.i18n = I18n
         
     | 
| 
       24 
     | 
    
         
            -
                @config.i18n.load_path += Dir[Sails.root.join('config', 'locales', '*.{rb,yml}').to_s]
         
     | 
| 
       25 
     | 
    
         
            -
                @config.i18n.default_locale = :en
         
     | 
| 
       26 
     | 
    
         
            -
                @config.thrift_processor = nil
         
     | 
| 
       27 
     | 
    
         
            -
                @config
         
     | 
| 
       28 
25 
     | 
    
         
             
              end
         
     | 
| 
       29 
26 
     | 
    
         | 
| 
      
 27 
     | 
    
         
            +
              # Sails.cache
         
     | 
| 
      
 28 
     | 
    
         
            +
              #
         
     | 
| 
      
 29 
     | 
    
         
            +
              # An abstract cache store class. There are multiple cache store
         
     | 
| 
      
 30 
     | 
    
         
            +
              # implementations, each having its own additional features. See the classes
         
     | 
| 
      
 31 
     | 
    
         
            +
              # under the ActiveSupport::Cache module, e.g.
         
     | 
| 
      
 32 
     | 
    
         
            +
              # ActiveSupport::Cache::MemCacheStore. MemCacheStore is currently the most
         
     | 
| 
      
 33 
     | 
    
         
            +
              # popular cache store for large production websites.
         
     | 
| 
      
 34 
     | 
    
         
            +
              #
         
     | 
| 
      
 35 
     | 
    
         
            +
              # Some implementations may not support all methods beyond the basic cache
         
     | 
| 
      
 36 
     | 
    
         
            +
              # methods of +fetch+, +write+, +read+, +exist?+, and +delete+.
         
     | 
| 
      
 37 
     | 
    
         
            +
              #
         
     | 
| 
      
 38 
     | 
    
         
            +
              # ActiveSupport::Cache::Store can store any serializable Ruby object.
         
     | 
| 
      
 39 
     | 
    
         
            +
              #
         
     | 
| 
      
 40 
     | 
    
         
            +
              #   Sails.cache.read('city')   # => nil
         
     | 
| 
      
 41 
     | 
    
         
            +
              #   Sails.cache.write('city', "Duckburgh")
         
     | 
| 
      
 42 
     | 
    
         
            +
              #   Sails.cache.read('city')   # => "Duckburgh"
         
     | 
| 
      
 43 
     | 
    
         
            +
              #
         
     | 
| 
      
 44 
     | 
    
         
            +
              # Keys are always translated into Strings and are case sensitive. When an
         
     | 
| 
      
 45 
     | 
    
         
            +
              # object is specified as a key and has a +cache_key+ method defined, this
         
     | 
| 
      
 46 
     | 
    
         
            +
              # method will be called to define the key.  Otherwise, the +to_param+
         
     | 
| 
      
 47 
     | 
    
         
            +
              # method will be called. Hashes and Arrays can also be used as keys. The
         
     | 
| 
      
 48 
     | 
    
         
            +
              # elements will be delimited by slashes, and the elements within a Hash
         
     | 
| 
      
 49 
     | 
    
         
            +
              # will be sorted by key so they are consistent.
         
     | 
| 
      
 50 
     | 
    
         
            +
              #
         
     | 
| 
      
 51 
     | 
    
         
            +
              #   Sails.cache.read('city') == Sails.cache.read(:city)   # => true
         
     | 
| 
      
 52 
     | 
    
         
            +
              #
         
     | 
| 
      
 53 
     | 
    
         
            +
              # Nil values can be cached.
         
     | 
| 
       30 
54 
     | 
    
         
             
              def self.cache
         
     | 
| 
       31 
55 
     | 
    
         
             
                return @cache if defined?(@cache)
         
     | 
| 
       32 
56 
     | 
    
         
             
                @cache = ActiveSupport::Cache.lookup_store(self.config.cache_store)
         
     | 
| 
       33 
57 
     | 
    
         
             
              end
         
     | 
| 
       34 
58 
     | 
    
         | 
| 
       35 
59 
     | 
    
         
             
              # Sails.root
         
     | 
| 
      
 60 
     | 
    
         
            +
              #
         
     | 
| 
      
 61 
     | 
    
         
            +
              # This method returns a Pathname object which handles paths starting with a / as absolute (starting from the root of the filesystem). Compare:
         
     | 
| 
      
 62 
     | 
    
         
            +
              #
         
     | 
| 
      
 63 
     | 
    
         
            +
              # For example:
         
     | 
| 
      
 64 
     | 
    
         
            +
              #   >> Sails.root
         
     | 
| 
      
 65 
     | 
    
         
            +
              #   => #<Pathname:/some/path/to/project>
         
     | 
| 
      
 66 
     | 
    
         
            +
              #   >> Sails.root + "file"
         
     | 
| 
      
 67 
     | 
    
         
            +
              #   => #<Pathname:/some/path/to/project/file>
         
     | 
| 
      
 68 
     | 
    
         
            +
              #
         
     | 
| 
       36 
69 
     | 
    
         
             
              def self.root
         
     | 
| 
       37 
70 
     | 
    
         
             
                @root ||= Pathname.new(Dir.pwd)
         
     | 
| 
       38 
71 
     | 
    
         
             
              end
         
     | 
| 
         @@ -41,11 +74,30 @@ module Sails 
     | 
|
| 
       41 
74 
     | 
    
         
             
                @root = Pathname.new(root)
         
     | 
| 
       42 
75 
     | 
    
         
             
              end
         
     | 
| 
       43 
76 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
              # Sails.env 
     | 
| 
      
 77 
     | 
    
         
            +
              # Sails.env
         
     | 
| 
      
 78 
     | 
    
         
            +
              #
         
     | 
| 
      
 79 
     | 
    
         
            +
              # returns a string representing the current Sails environment.
         
     | 
| 
      
 80 
     | 
    
         
            +
              # This will read from ENV['RAILS_ENV'] like Rails
         
     | 
| 
      
 81 
     | 
    
         
            +
              #
         
     | 
| 
      
 82 
     | 
    
         
            +
              # For example:
         
     | 
| 
      
 83 
     | 
    
         
            +
              #
         
     | 
| 
      
 84 
     | 
    
         
            +
              #     Sails.env # in development mode
         
     | 
| 
      
 85 
     | 
    
         
            +
              #     => "development"
         
     | 
| 
      
 86 
     | 
    
         
            +
              #     Sails.env.development?
         
     | 
| 
      
 87 
     | 
    
         
            +
              #     => true
         
     | 
| 
      
 88 
     | 
    
         
            +
              #
         
     | 
| 
       45 
89 
     | 
    
         
             
              def self.env
         
     | 
| 
       46 
90 
     | 
    
         
             
                @env ||= ActiveSupport::StringInquirer.new(ENV['RAILS_ENV'].presence || 'development')
         
     | 
| 
       47 
91 
     | 
    
         
             
              end
         
     | 
| 
       48 
92 
     | 
    
         | 
| 
      
 93 
     | 
    
         
            +
              # Sails.logger
         
     | 
| 
      
 94 
     | 
    
         
            +
              #
         
     | 
| 
      
 95 
     | 
    
         
            +
              # returns a Logger class
         
     | 
| 
      
 96 
     | 
    
         
            +
              # For example:
         
     | 
| 
      
 97 
     | 
    
         
            +
              #
         
     | 
| 
      
 98 
     | 
    
         
            +
              #     Sails.logger.info "Hello world"
         
     | 
| 
      
 99 
     | 
    
         
            +
              #     Sails.logger.error "Hello world"
         
     | 
| 
      
 100 
     | 
    
         
            +
              #
         
     | 
| 
       49 
101 
     | 
    
         
             
              def self.logger
         
     | 
| 
       50 
102 
     | 
    
         
             
                return @logger if defined?(@logger)
         
     | 
| 
       51 
103 
     | 
    
         
             
                @logger = Logger.new(File.join(Sails.root, "log/#{self.env}.log"))
         
     | 
| 
         @@ -56,21 +108,6 @@ module Sails 
     | 
|
| 
       56 
108 
     | 
    
         
             
                @logger
         
     | 
| 
       57 
109 
     | 
    
         
             
              end
         
     | 
| 
       58 
110 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
              def self.stdout_logger
         
     | 
| 
       60 
     | 
    
         
            -
                return @stdout_logger if defined?(@stdout_logger)
         
     | 
| 
       61 
     | 
    
         
            -
                @stdout_logger = Logger.new(STDOUT)
         
     | 
| 
       62 
     | 
    
         
            -
                @stdout_logger.formatter = proc { |severity, datetime, progname, msg|
         
     | 
| 
       63 
     | 
    
         
            -
                  "#{msg}\n"
         
     | 
| 
       64 
     | 
    
         
            -
                }
         
     | 
| 
       65 
     | 
    
         
            -
                @stdout_logger
         
     | 
| 
       66 
     | 
    
         
            -
              end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
              def self.load_initialize
         
     | 
| 
       69 
     | 
    
         
            -
                Dir["#{Sails.root}/config/initializers/*.rb"].each do |f|
         
     | 
| 
       70 
     | 
    
         
            -
                  require f
         
     | 
| 
       71 
     | 
    
         
            -
                end
         
     | 
| 
       72 
     | 
    
         
            -
              end
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
111 
     | 
    
         
             
              def self.init
         
     | 
| 
       75 
112 
     | 
    
         
             
                $:.unshift self.root.join("lib")
         
     | 
| 
       76 
113 
     | 
    
         
             
                # init root
         
     | 
| 
         @@ -80,7 +117,7 @@ module Sails 
     | 
|
| 
       80 
117 
     | 
    
         | 
| 
       81 
118 
     | 
    
         
             
                ActiveSupport::Dependencies.autoload_paths += Sails.config.autoload_paths
         
     | 
| 
       82 
119 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
                env_file = self.root.join('config/environments/',Sails.env)
         
     | 
| 
      
 120 
     | 
    
         
            +
                env_file = self.root.join('config/environments/',Sails.env + ".rb")
         
     | 
| 
       84 
121 
     | 
    
         
             
                if File.exist?(env_file)
         
     | 
| 
       85 
122 
     | 
    
         
             
                  require env_file
         
     | 
| 
       86 
123 
     | 
    
         
             
                end
         
     | 
| 
         @@ -93,31 +130,80 @@ module Sails 
     | 
|
| 
       93 
130 
     | 
    
         
             
                @inited = true
         
     | 
| 
       94 
131 
     | 
    
         
             
              end
         
     | 
| 
       95 
132 
     | 
    
         | 
| 
      
 133 
     | 
    
         
            +
              # Sails.service
         
     | 
| 
      
 134 
     | 
    
         
            +
              #
         
     | 
| 
      
 135 
     | 
    
         
            +
              # return a instance of Sails Service layer
         
     | 
| 
      
 136 
     | 
    
         
            +
              #
         
     | 
| 
      
 137 
     | 
    
         
            +
              # for example:
         
     | 
| 
      
 138 
     | 
    
         
            +
              #
         
     | 
| 
      
 139 
     | 
    
         
            +
              #     class UsersService < Sails::Service::Base
         
     | 
| 
      
 140 
     | 
    
         
            +
              #       def check_name_exist?(name)
         
     | 
| 
      
 141 
     | 
    
         
            +
              #         User.check_name_exist?(name)
         
     | 
| 
      
 142 
     | 
    
         
            +
              #       end
         
     | 
| 
      
 143 
     | 
    
         
            +
              #     end
         
     | 
| 
      
 144 
     | 
    
         
            +
              #
         
     | 
| 
      
 145 
     | 
    
         
            +
              #     class UsersServiceTest
         
     | 
| 
      
 146 
     | 
    
         
            +
              #       def test_check_name_exist?
         
     | 
| 
      
 147 
     | 
    
         
            +
              #         assert_equal(Sails.service.check_name_exist?(name), true) 
         
     | 
| 
      
 148 
     | 
    
         
            +
              #       end
         
     | 
| 
      
 149 
     | 
    
         
            +
              #     end
         
     | 
| 
      
 150 
     | 
    
         
            +
              #
         
     | 
| 
      
 151 
     | 
    
         
            +
              def self.service
         
     | 
| 
      
 152 
     | 
    
         
            +
                @service ||= Sails::Service::Interface.new
         
     | 
| 
      
 153 
     | 
    
         
            +
              end
         
     | 
| 
      
 154 
     | 
    
         
            +
              
         
     | 
| 
      
 155 
     | 
    
         
            +
              # Force reload Sails cache classes in config.autoload_paths
         
     | 
| 
      
 156 
     | 
    
         
            +
              def self.reload!(opts = {})
         
     | 
| 
      
 157 
     | 
    
         
            +
                force = opts[:force] || false
         
     | 
| 
      
 158 
     | 
    
         
            +
                if force || config.cache_classes == false
         
     | 
| 
      
 159 
     | 
    
         
            +
                  @service = nil
         
     | 
| 
      
 160 
     | 
    
         
            +
                  ActiveSupport::Dependencies.clear
         
     | 
| 
      
 161 
     | 
    
         
            +
                  reload_server!
         
     | 
| 
      
 162 
     | 
    
         
            +
                end
         
     | 
| 
      
 163 
     | 
    
         
            +
              end
         
     | 
| 
      
 164 
     | 
    
         
            +
             
     | 
| 
      
 165 
     | 
    
         
            +
              def self.reload_server!
         
     | 
| 
      
 166 
     | 
    
         
            +
                if @server
         
     | 
| 
      
 167 
     | 
    
         
            +
                  new_processor = config.processor.new(self.service)
         
     | 
| 
      
 168 
     | 
    
         
            +
                  @server.instance_variable_set(:@processor, new_processor)
         
     | 
| 
      
 169 
     | 
    
         
            +
                end
         
     | 
| 
      
 170 
     | 
    
         
            +
              end
         
     | 
| 
      
 171 
     | 
    
         
            +
              
         
     | 
| 
       96 
172 
     | 
    
         
             
              def self.start!(type)
         
     | 
| 
       97 
     | 
    
         
            -
                 
     | 
| 
      
 173 
     | 
    
         
            +
                @server_type = type
         
     | 
| 
      
 174 
     | 
    
         
            +
                if @server_type == "thread"
         
     | 
| 
       98 
175 
     | 
    
         
             
                  start_thread_pool_server!
         
     | 
| 
       99 
176 
     | 
    
         
             
                else
         
     | 
| 
       100 
177 
     | 
    
         
             
                  start_non_blocking_server!
         
     | 
| 
       101 
178 
     | 
    
         
             
                end
         
     | 
| 
       102 
179 
     | 
    
         
             
              end
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
              def self. 
     | 
| 
       105 
     | 
    
         
            -
                 
     | 
| 
      
 180 
     | 
    
         
            +
              
         
     | 
| 
      
 181 
     | 
    
         
            +
              def self.thrift_protocol_class
         
     | 
| 
      
 182 
     | 
    
         
            +
                case config.protocol
         
     | 
| 
      
 183 
     | 
    
         
            +
                when :compact
         
     | 
| 
      
 184 
     | 
    
         
            +
                  return ::Thrift::CompactProtocolFactory
         
     | 
| 
      
 185 
     | 
    
         
            +
                when :json
         
     | 
| 
      
 186 
     | 
    
         
            +
                  return ::Thrift::JsonProtocolFactory
         
     | 
| 
      
 187 
     | 
    
         
            +
                else 
         
     | 
| 
      
 188 
     | 
    
         
            +
                  return ::Thrift::BinaryProtocolFactory
         
     | 
| 
      
 189 
     | 
    
         
            +
                end
         
     | 
| 
       106 
190 
     | 
    
         
             
              end
         
     | 
| 
       107 
191 
     | 
    
         | 
| 
      
 192 
     | 
    
         
            +
              # Start Thrift Server with Threaded mode
         
     | 
| 
      
 193 
     | 
    
         
            +
              #
         
     | 
| 
       108 
194 
     | 
    
         
             
              def self.start_thread_pool_server!
         
     | 
| 
       109 
     | 
    
         
            -
                transport = ::Thrift::ServerSocket.new(nil, config. 
     | 
| 
      
 195 
     | 
    
         
            +
                transport = ::Thrift::ServerSocket.new(nil, config.thread_port)
         
     | 
| 
       110 
196 
     | 
    
         
             
                transport_factory = ::Thrift::BufferedTransportFactory.new
         
     | 
| 
       111 
     | 
    
         
            -
                protocol_factory =  
     | 
| 
       112 
     | 
    
         
            -
                processor = config. 
     | 
| 
       113 
     | 
    
         
            -
                server = ::Thrift::ThreadPoolServer.new(processor, transport, transport_factory, protocol_factory,  
     | 
| 
      
 197 
     | 
    
         
            +
                protocol_factory = thrift_protocol_class.new
         
     | 
| 
      
 198 
     | 
    
         
            +
                processor = config.processor.new(self.service)
         
     | 
| 
      
 199 
     | 
    
         
            +
                @server = ::Thrift::ThreadPoolServer.new(processor, transport, transport_factory, protocol_factory, config.thread_size)
         
     | 
| 
       114 
200 
     | 
    
         | 
| 
       115 
201 
     | 
    
         
             
                puts "Boot on: #{Sails.root}"
         
     | 
| 
       116 
202 
     | 
    
         
             
                puts "[#{Time.now}] Starting the Sails with ThreadPool size: #{Setting.pool_size}..."
         
     | 
| 
       117 
     | 
    
         
            -
                puts "serve:  
     | 
| 
      
 203 
     | 
    
         
            +
                puts "serve: 127.0.0.1:#{config.thread_port}"
         
     | 
| 
       118 
204 
     | 
    
         | 
| 
       119 
205 
     | 
    
         
             
                begin
         
     | 
| 
       120 
     | 
    
         
            -
                  server.serve
         
     | 
| 
      
 206 
     | 
    
         
            +
                  @server.serve
         
     | 
| 
       121 
207 
     | 
    
         
             
                rescue => e
         
     | 
| 
       122 
208 
     | 
    
         
             
                  puts "Start thrift server exception! \n  #{e.inspect}"
         
     | 
| 
       123 
209 
     | 
    
         
             
                  puts e.backtrace
         
     | 
| 
         @@ -129,19 +215,21 @@ module Sails 
     | 
|
| 
       129 
215 
     | 
    
         
             
                end
         
     | 
| 
       130 
216 
     | 
    
         
             
              end
         
     | 
| 
       131 
217 
     | 
    
         | 
| 
      
 218 
     | 
    
         
            +
              # Start Thrift Server with Event drive mode
         
     | 
| 
       132 
219 
     | 
    
         
             
              def self.start_non_blocking_server!
         
     | 
| 
       133 
     | 
    
         
            -
                transport = ::Thrift::ServerSocket.new(nil, config. 
     | 
| 
      
 220 
     | 
    
         
            +
                transport = ::Thrift::ServerSocket.new(nil, config.port)
         
     | 
| 
       134 
221 
     | 
    
         
             
                transport_factory = ::Thrift::FramedTransportFactory.new
         
     | 
| 
       135 
     | 
    
         
            -
                protocol_factory =  
     | 
| 
       136 
     | 
    
         
            -
                processor = config. 
     | 
| 
       137 
     | 
    
         
            -
                server = ::Thrift::NonblockingServer.new(processor, transport, transport_factory)
         
     | 
| 
      
 222 
     | 
    
         
            +
                protocol_factory = thrift_protocol_class.new
         
     | 
| 
      
 223 
     | 
    
         
            +
                processor = config.processor.new(self.service)
         
     | 
| 
      
 224 
     | 
    
         
            +
                @server = ::Thrift::NonblockingServer.new(processor, transport, transport_factory, protocol_factory, config.thread_size)
         
     | 
| 
       138 
225 
     | 
    
         | 
| 
       139 
226 
     | 
    
         
             
                puts "Boot on: #{Sails.root}"
         
     | 
| 
       140 
227 
     | 
    
         
             
                puts "[#{Time.now}] Starting the Sails with NonBlocking..."
         
     | 
| 
       141 
     | 
    
         
            -
                puts " 
     | 
| 
      
 228 
     | 
    
         
            +
                puts "Protocol: #{thrift_protocol_class.name}"
         
     | 
| 
      
 229 
     | 
    
         
            +
                puts "serve: 127.0.0.1:#{config.port}"
         
     | 
| 
       142 
230 
     | 
    
         | 
| 
       143 
231 
     | 
    
         
             
                begin
         
     | 
| 
       144 
     | 
    
         
            -
                  server.serve
         
     | 
| 
      
 232 
     | 
    
         
            +
                  @server.serve
         
     | 
| 
       145 
233 
     | 
    
         
             
                rescue => e
         
     | 
| 
       146 
234 
     | 
    
         
             
                  puts "Start thrift server exception! \n  #{e.inspect}"
         
     | 
| 
       147 
235 
     | 
    
         
             
                  puts e.backtrace
         
     | 
| 
         @@ -152,4 +240,22 @@ module Sails 
     | 
|
| 
       152 
240 
     | 
    
         
             
                  end
         
     | 
| 
       153 
241 
     | 
    
         
             
                end
         
     | 
| 
       154 
242 
     | 
    
         
             
              end
         
     | 
| 
       155 
     | 
    
         
            -
             
     | 
| 
      
 243 
     | 
    
         
            +
              
         
     | 
| 
      
 244 
     | 
    
         
            +
              private
         
     | 
| 
      
 245 
     | 
    
         
            +
              def self.stdout_logger
         
     | 
| 
      
 246 
     | 
    
         
            +
                return @stdout_logger if defined?(@stdout_logger)
         
     | 
| 
      
 247 
     | 
    
         
            +
                @stdout_logger = Logger.new(STDOUT)
         
     | 
| 
      
 248 
     | 
    
         
            +
                @stdout_logger.formatter = proc { |severity, datetime, progname, msg|
         
     | 
| 
      
 249 
     | 
    
         
            +
                  "#{msg}\n"
         
     | 
| 
      
 250 
     | 
    
         
            +
                }
         
     | 
| 
      
 251 
     | 
    
         
            +
                @stdout_logger
         
     | 
| 
      
 252 
     | 
    
         
            +
              end
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
      
 254 
     | 
    
         
            +
              def self.load_initialize
         
     | 
| 
      
 255 
     | 
    
         
            +
                Dir["#{Sails.root}/config/initializers/*.rb"].each do |f|
         
     | 
| 
      
 256 
     | 
    
         
            +
                  require f
         
     | 
| 
      
 257 
     | 
    
         
            +
                end
         
     | 
| 
      
 258 
     | 
    
         
            +
              end
         
     | 
| 
      
 259 
     | 
    
         
            +
            end
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
      
 261 
     | 
    
         
            +
            Sails.init()
         
     | 
    
        data/lib/sails/cli.rb
    CHANGED
    
    | 
         @@ -2,76 +2,12 @@ require 'thor' 
     | 
|
| 
       2 
2 
     | 
    
         
             
            require 'sails/version'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            module Sails
         
     | 
| 
       5 
     | 
    
         
            -
              class ThreadDaemon
         
     | 
| 
       6 
     | 
    
         
            -
                class << self
         
     | 
| 
       7 
     | 
    
         
            -
                  attr_accessor :options, :mode, :app_name, :pid_file
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                  def init(opts = {})
         
     | 
| 
       10 
     | 
    
         
            -
                    self.app_name = Sails.config.app_name
         
     | 
| 
       11 
     | 
    
         
            -
                    self.mode = opts[:mode]
         
     | 
| 
       12 
     | 
    
         
            -
                    self.app_name = "#{ThreadDaemon.app_name}-thread" if self.mode == "thread"
         
     | 
| 
       13 
     | 
    
         
            -
                    self.pid_file = Sails.root.join("tmp/#{ThreadDaemon.app_name}.pid")
         
     | 
| 
       14 
     | 
    
         
            -
                    self.options = options
         
     | 
| 
       15 
     | 
    
         
            -
                  end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  def read_pid
         
     | 
| 
       18 
     | 
    
         
            -
                    if !File.exist?(pid_file)
         
     | 
| 
       19 
     | 
    
         
            -
                      return nil
         
     | 
| 
       20 
     | 
    
         
            -
                    end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                    pid = File.open(pid_file).read.to_i
         
     | 
| 
       23 
     | 
    
         
            -
                    begin
         
     | 
| 
       24 
     | 
    
         
            -
                      Process.getpgid(pid)
         
     | 
| 
       25 
     | 
    
         
            -
                    rescue
         
     | 
| 
       26 
     | 
    
         
            -
                      pid = nil
         
     | 
| 
       27 
     | 
    
         
            -
                    end
         
     | 
| 
       28 
     | 
    
         
            -
                    return pid
         
     | 
| 
       29 
     | 
    
         
            -
                  end
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                  def start_process(options = {})
         
     | 
| 
       32 
     | 
    
         
            -
                    $PROGRAM_NAME = self.app_name
         
     | 
| 
       33 
     | 
    
         
            -
                    old_pid = read_pid
         
     | 
| 
       34 
     | 
    
         
            -
                    if old_pid != nil
         
     | 
| 
       35 
     | 
    
         
            -
                      puts "Current have #{app_name} process in running on pid #{old_pid}"
         
     | 
| 
       36 
     | 
    
         
            -
                      return
         
     | 
| 
       37 
     | 
    
         
            -
                    end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                    pid = fork do
         
     | 
| 
       40 
     | 
    
         
            -
                      Sails.start!(self.mode)
         
     | 
| 
       41 
     | 
    
         
            -
                    end
         
     | 
| 
       42 
     | 
    
         
            -
                    File.open(pid_file, "w+") do |f|
         
     | 
| 
       43 
     | 
    
         
            -
                      f.puts pid
         
     | 
| 
       44 
     | 
    
         
            -
                    end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                    puts "Started #{app_name} on pid: #{pid}"
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                    if options[:daemon] == false
         
     | 
| 
       49 
     | 
    
         
            -
                      Process.waitpid(pid)
         
     | 
| 
       50 
     | 
    
         
            -
                    end
         
     | 
| 
       51 
     | 
    
         
            -
                  end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                  def stop_process
         
     | 
| 
       54 
     | 
    
         
            -
                    pid = read_pid
         
     | 
| 
       55 
     | 
    
         
            -
                    if pid == nil
         
     | 
| 
       56 
     | 
    
         
            -
                      puts "#{app_name} process not found, pid #{pid}"
         
     | 
| 
       57 
     | 
    
         
            -
                      return
         
     | 
| 
       58 
     | 
    
         
            -
                    end
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                    print "Stopping #{app_name} with pid: #{pid}..."
         
     | 
| 
       61 
     | 
    
         
            -
                    begin
         
     | 
| 
       62 
     | 
    
         
            -
                      Process.kill("QUIT", pid)
         
     | 
| 
       63 
     | 
    
         
            -
                    ensure
         
     | 
| 
       64 
     | 
    
         
            -
                      File.delete(pid_file)
         
     | 
| 
       65 
     | 
    
         
            -
                    end
         
     | 
| 
       66 
     | 
    
         
            -
                    puts " [Done]"
         
     | 
| 
       67 
     | 
    
         
            -
                  end
         
     | 
| 
       68 
     | 
    
         
            -
                end
         
     | 
| 
       69 
     | 
    
         
            -
              end
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
5 
     | 
    
         
             
              class CLI < Thor
         
     | 
| 
       72 
6 
     | 
    
         
             
                include Thor::Actions
         
     | 
| 
       73 
7 
     | 
    
         | 
| 
       74 
8 
     | 
    
         
             
                map '-v' => :version
         
     | 
| 
      
 9 
     | 
    
         
            +
                map 's' => :start
         
     | 
| 
      
 10 
     | 
    
         
            +
                map 'c' => :console
         
     | 
| 
       75 
11 
     | 
    
         | 
| 
       76 
12 
     | 
    
         
             
                def self.source_root
         
     | 
| 
       77 
13 
     | 
    
         
             
                  __dir__
         
     | 
| 
         @@ -83,27 +19,36 @@ module Sails 
     | 
|
| 
       83 
19 
     | 
    
         
             
                  end
         
     | 
| 
       84 
20 
     | 
    
         
             
                }
         
     | 
| 
       85 
21 
     | 
    
         | 
| 
      
 22 
     | 
    
         
            +
                # sails start
         
     | 
| 
      
 23 
     | 
    
         
            +
                #
         
     | 
| 
      
 24 
     | 
    
         
            +
                # Start a thrift app server
         
     | 
| 
       86 
25 
     | 
    
         
             
                option :daemon, type: :boolean, default: false
         
     | 
| 
       87 
26 
     | 
    
         
             
                option :mode, default: 'nonblocking'
         
     | 
| 
       88 
27 
     | 
    
         
             
                desc "start", "Start Thrift server"
         
     | 
| 
       89 
28 
     | 
    
         
             
                def start()
         
     | 
| 
       90 
     | 
    
         
            -
                   
     | 
| 
       91 
     | 
    
         
            -
                   
     | 
| 
      
 29 
     | 
    
         
            +
                  Sails::Daemon.init(mode: options[:mode])
         
     | 
| 
      
 30 
     | 
    
         
            +
                  Sails::Daemon.start_process(daemon: options[:daemon])
         
     | 
| 
       92 
31 
     | 
    
         
             
                end
         
     | 
| 
       93 
32 
     | 
    
         | 
| 
      
 33 
     | 
    
         
            +
                # sails stop
         
     | 
| 
      
 34 
     | 
    
         
            +
                #
         
     | 
| 
      
 35 
     | 
    
         
            +
                # Stop thrift app server
         
     | 
| 
       94 
36 
     | 
    
         
             
                option :mode, default: 'nonblocking'
         
     | 
| 
       95 
37 
     | 
    
         
             
                desc "stop", "Stop Thrift server"
         
     | 
| 
       96 
38 
     | 
    
         
             
                def stop()
         
     | 
| 
       97 
     | 
    
         
            -
                   
     | 
| 
       98 
     | 
    
         
            -
                   
     | 
| 
      
 39 
     | 
    
         
            +
                  Sails::Daemon.init(mode: options[:mode])
         
     | 
| 
      
 40 
     | 
    
         
            +
                  Sails::Daemon.stop_process
         
     | 
| 
       99 
41 
     | 
    
         
             
                end
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
      
 42 
     | 
    
         
            +
                
         
     | 
| 
      
 43 
     | 
    
         
            +
                # sails restart
         
     | 
| 
      
 44 
     | 
    
         
            +
                #
         
     | 
| 
      
 45 
     | 
    
         
            +
                # Restart thrift app server
         
     | 
| 
       101 
46 
     | 
    
         
             
                option :mode, default: 'nonblocking'
         
     | 
| 
       102 
47 
     | 
    
         
             
                desc "restart", "Restart Thrift server"
         
     | 
| 
       103 
48 
     | 
    
         
             
                def restart()
         
     | 
| 
       104 
     | 
    
         
            -
                   
     | 
| 
       105 
     | 
    
         
            -
                   
     | 
| 
       106 
     | 
    
         
            -
                   
     | 
| 
      
 49 
     | 
    
         
            +
                  Sails::Daemon.init(mode: options[:mode])
         
     | 
| 
      
 50 
     | 
    
         
            +
                  Sails::Daemon.stop_process
         
     | 
| 
      
 51 
     | 
    
         
            +
                  Sails::Daemon.start_process(daemon: true)
         
     | 
| 
       107 
52 
     | 
    
         
             
                end
         
     | 
| 
       108 
53 
     | 
    
         | 
| 
       109 
54 
     | 
    
         
             
                desc "new APP_NAME", "Create a project"
         
     | 
| 
         @@ -125,6 +70,11 @@ module Sails 
     | 
|
| 
       125 
70 
     | 
    
         
             
                  @rel_dir = nil
         
     | 
| 
       126 
71 
     | 
    
         
             
                end
         
     | 
| 
       127 
72 
     | 
    
         | 
| 
      
 73 
     | 
    
         
            +
                desc "console", "Enter Sails console"
         
     | 
| 
      
 74 
     | 
    
         
            +
                def console
         
     | 
| 
      
 75 
     | 
    
         
            +
                  Sails::Console.start(Sails.root.join("config/application.rb"))
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
                
         
     | 
| 
       128 
78 
     | 
    
         
             
                desc "version", "Show Sails version"
         
     | 
| 
       129 
79 
     | 
    
         
             
                def version
         
     | 
| 
       130 
80 
     | 
    
         
             
                  puts "Sails #{Sails.version}"
         
     | 
    
        data/lib/sails/config.rb
    ADDED
    
    | 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Sails
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Config
         
     | 
| 
      
 3 
     | 
    
         
            +
                include ActiveSupport::Configurable
         
     | 
| 
      
 4 
     | 
    
         
            +
                
         
     | 
| 
      
 5 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 6 
     | 
    
         
            +
                  init_defaults!
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
                
         
     | 
| 
      
 9 
     | 
    
         
            +
                def init_defaults!
         
     | 
| 
      
 10 
     | 
    
         
            +
                  config.app_name = "Sails"
         
     | 
| 
      
 11 
     | 
    
         
            +
                  config.cache_store = [:memory_store]
         
     | 
| 
      
 12 
     | 
    
         
            +
                  config.autoload_paths = %W(app/models app/models/concerns app/workers app/services app/services/concerns lib)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  config.i18n = I18n
         
     | 
| 
      
 14 
     | 
    
         
            +
                  config.i18n.load_path += Dir[Sails.root.join('config', 'locales', '*.{rb,yml}').to_s]
         
     | 
| 
      
 15 
     | 
    
         
            +
                  config.i18n.default_locale = :en
         
     | 
| 
      
 16 
     | 
    
         
            +
                  config.cache_classes = false
         
     | 
| 
      
 17 
     | 
    
         
            +
                  
         
     | 
| 
      
 18 
     | 
    
         
            +
                  config.port = 4000
         
     | 
| 
      
 19 
     | 
    
         
            +
                  config.thread_port = 4001
         
     | 
| 
      
 20 
     | 
    
         
            +
                  config.processor = nil
         
     | 
| 
      
 21 
     | 
    
         
            +
                  config.thread_size = 20
         
     | 
| 
      
 22 
     | 
    
         
            +
                  config.protocol = :binary
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,44 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "irb"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "irb/ext/loader"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Sails
         
     | 
| 
      
 5 
     | 
    
         
            +
              module ConsoleMethods
         
     | 
| 
      
 6 
     | 
    
         
            +
                extend ActiveSupport::Concern
         
     | 
| 
      
 7 
     | 
    
         
            +
                
         
     | 
| 
      
 8 
     | 
    
         
            +
                included do
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
                
         
     | 
| 
      
 11 
     | 
    
         
            +
                def service
         
     | 
| 
      
 12 
     | 
    
         
            +
                  Sails.service
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
                
         
     | 
| 
      
 15 
     | 
    
         
            +
                def reload!
         
     | 
| 
      
 16 
     | 
    
         
            +
                  puts "Reloading..."
         
     | 
| 
      
 17 
     | 
    
         
            +
                  Sails.reload!(force: true)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  return true
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
              
         
     | 
| 
      
 22 
     | 
    
         
            +
              class Console
         
     | 
| 
      
 23 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 24 
     | 
    
         
            +
                  def start(app_path)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    new(app_path).start
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
                
         
     | 
| 
      
 29 
     | 
    
         
            +
                def initialize(app_path)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @app_path = app_path
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
                
         
     | 
| 
      
 33 
     | 
    
         
            +
                def start
         
     | 
| 
      
 34 
     | 
    
         
            +
                  puts "Loading #{Sails.env} environment (Sails #{Sails.version})"
         
     | 
| 
      
 35 
     | 
    
         
            +
                  IRB.conf[:IRB_NAME] = "Sails console"
         
     | 
| 
      
 36 
     | 
    
         
            +
                  require @app_path
         
     | 
| 
      
 37 
     | 
    
         
            +
                  ARGV.clear
         
     | 
| 
      
 38 
     | 
    
         
            +
                  if defined?(IRB::ExtendCommandBundle)
         
     | 
| 
      
 39 
     | 
    
         
            +
                    IRB::ExtendCommandBundle.send :include, Sails::ConsoleMethods
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                  IRB.start()
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     |