GithubHelp home page GithubHelp logo

openware / peatio Goto Github PK

View Code? Open in Web Editor NEW

This project forked from hpyhacking/peatio

1.0K 91.0 625.0 14.58 MB

Open-source crypto currency exchange software (https://openware.com)

Home Page: https://www.openware.com

License: MIT License

Ruby 98.22% HTML 1.53% Shell 0.14% Dockerfile 0.11%
cryptocurrency cryptocurrency-exchanges bitcoin ethereum blockchain peatio crypto-exchange-software trading-platform cryptocurrency-exchange-software

peatio's Introduction

Cryptocurrency Exchange Platform - Baseapp

Component part of OpenDAX Trading Platform

Peatio - Cryptocurrency Exchange Software

Build Status Telegram Chat

What is Peatio

Peatio is a free and open-source crypto-currency exchange implementation with the Rails framework. This is a fork of Peatio designed for micro-services architecture. We have simplified the code in order to use only Peatio API with external frontend and server components.

Peatio is the core accounting component and configuration for markets; it is part of OpenDAX system.

Getting Started

OpenDAX is a container distribution, the fastest way to install the full stack is using OpenDAX OpenDAX can be installed under 15 minutes on any Linux / Mac OS X environment with Docker.

# To install
git clone https://github.com/openware/opendax.git
# Follow the README instructions
# Configure config/app.yml
bundle install
bundle exec rake service:all
# Open your browser on www.app.local (please it in /etc/hosts)

To build your own exchange you should now run Peatio as a backend instead of forking the repository, and extend it using other microservices such as Barong.

System Overview

Cryptocurrency Exchange Platform overview

This is a service oriented architecture; the system is designed to be customized by creating Applogic which is your api code. Barong will dispatch the traffic on your api to extend the current system.

Mission

Our mission is to build an open-source crypto exchange software with a high performance trading engine and incomparable security. We are moving toward dev/ops best practices of running an enterprise grade exchange.

We provide webinar or on site training for installing, configuring and administration best practices of Peatio. Feel free to contact us for joining the next training session: Openware.com

Help is greatly appreciated, feel free to submit pull-requests or open issues.

Things You Should Know

RUNNING A CRYPTO CURRENCY EXCHANGE IS HARD.

This repository is not a turn key solution and will require engineering and design of security process by your company, with or without our assistance. This repository is one component among many we recommend using for composing an enterprise grade exchange. It is highly recommended to deploy a UAT environment and build automated tests for your needs, including Functional tests, Smoke tests and Security vulnerability scans. You may not need to have an active developer on Peatio source code, however, we recommend the following team setup: 1 dev/ops, 3 frontend developers (react / angular), 2 QA engineers, 1 Security Officer.

SECURITY KNOWLEDGE IS A REQUIREMENT.

Peatio cannot protect your customers if you leave your admin password 1234567, or open sensitive ports to public internet. No one can. Running an exchange is a very risky task because you're dealing with money directly. If you don't know how to make your exchange secure, hire an expert.

You must know what you're doing, there's no shortcut. Please get prepared before you continue:

  • Rails knowledge
  • Security knowledge
  • Cloud and Linux administration
  • Docker and Kubernetes administration
  • Micro-services and OAuth 2.0

Features

  • Designed as high performance crypto currency exchange
  • Built-in high performance matching-engine
  • Built-in multiple wallet support (e.g. deposit, hot, warm and cold)
  • Built-in plugable coin API
  • Build-in Management API - server-to-server API with high privileges
  • Build-in RabbitMQ Event API
  • Usability and scalability
  • Websocket API and high frequency trading support
  • Support multiple digital currencies (e.g. Bitcoin, Litecoin, Ethereum, Ripple etc.)
  • Support ERC20 Tokens
  • API endpoint for FIAT deposits or payment gateways.
  • Powerful admin dashboard and management tools
  • Highly configurable and extendable
  • Industry standard security out of box
  • Maintained by Openware.com
  • KYC Verification provided by Barong

Contribute

Please see CONTRIBUTING.md for details on how to contribute issues, fixes, and patches to this project.

Getting Started

We advice to use minimalistic environment if you want to develop only Peatio and don't touch processes which interact with other components.

Otherwise we advice to use microkube based environment

Minimalistic local development environment with docker-compose:

Prerequisites

Installation

Local development install

  1. Set up initial configuration ./bin/setup
  2. Start peatio daemons god -c lib/daemons/daemons.god
  3. Add this to your /etc/hosts:
127.0.0.1 www.app.local
127.0.0.1 peatio.app.local
127.0.0.1 barong.app.local
  1. Start rails server JWT_PUBLIC_KEY=$(cat config/secrets/rsa-key.pub| base64 -w0) rails s -b 0.0.0.0 (base64 -b0 for macOS)

Local development environment with docker compose:

We suggest you to start using Peatio by installing OpenDAX. OpenDAX which is based on Docker containers is a convenient and straightforward way to start Peatio crypto exchange software development environment.

Prerequisites

Start OpenDAX ready to use

Follow OpenDAX documentation for the latest Peatio installation information.

Barong is an essential part of Openware crypto exchange software stack. It's providing the authentication service, it provides KyC and 2FA features out of the box.

Barong manages roles and kyc level across all applications from the OpenDAX stack. It can be easily extended using Rest Management API and Event API.

Barong key features
  • KYC Verification for individuals
  • SMS and Google two-factor authentication
  • Transaction Signature support
  • Implement JWT standard to authenticate users of every microservice of the OpenDAX stack

Start barong:

$> docker-compose run --rm barong bash -c "./bin/link_config && ./bin/setup"
$> docker-compose up -d barong

This will output password for [email protected]. Default password is Qwerty123

Peatio

Start peatio server

$> docker-compose run --rm peatio bash -c "bundle exec rake db:create db:migrate db:seed"
$> docker-compose up -d peatio

After all of that you can start using Peatio in your browser just by following one of the hosts which you added earlier.

API

You can interact with Peatio through API:

  • Account, Market & Public API v2
  • Management API v2
  • Websocket API
  • Event API (AMQP)

Getting Involved

We want to make it super-easy for Peatio users and contributors to talk to us and connect with each other, to share ideas, solve problems and help make Peatio awesome. Here are the main channels we're running currently, we'd love to hear from you on one of them:

Discourse

Rubykube Discourse Forum

This is for all Peatio users. You can find guides, recipes, questions, and answers from Snowplow users including the Peatio.tech team. We welcome questions and contributions!

Telegram

@peatio

Chat with us and other community members on Telegram.

GitHub

Peatio issues

If you spot a bug, then please raise an issue in our main GitHub project (Openware Peatio)[https://github.com/openware/peatio/]; likewise, if you have developed a new feature or an improvement in your Rubykube Peatio fork, then send us a pull request! If you want to brainstorm a potential new feature, then the Telegram group is the best place to start (see above).

Email

[email protected]

If you want to talk directly to us (e.g. about a commercially sensitive issue), email is the easiest way.

Getting Support and Customization

If you need help with running/deploying/customizing Peatio, you can contact us on Openware.com.

Contact us by email: [email protected]

License

Peatio is released under the terms of the MIT license.

What is Peatio?

Peatio (Chinese: 貔貅) is a Chinese mythical hybrid creature considered to be a very powerful protector to practitioners of Feng Shui.

peatio's People

Contributors

akulakovaa avatar ashchan avatar beenhero avatar chumaknadya avatar dinesh-skyach avatar dnfd avatar dpatsora avatar ec avatar gfedorenko avatar k1t4er avatar kaiten-mahajan avatar kite-bot avatar kohelbekker avatar lgn21st avatar lifu avatar liushooter avatar mnaichuk avatar mod avatar poshboytl avatar ritesh-skyach avatar shal avatar spavlishak avatar tomlion avatar vpetrusenko avatar vshatravenko avatar webmix avatar weilu avatar yivo avatar ymasiuk avatar ysv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

peatio's Issues

Application is shipped with different binaries than Rails defaults

When you run exec rails commands you get the next output:

~/Development/my-peatio master $ bundle exec rails s
Looks like your app's ./bin/rails is a stub that was generated by Bundler.

In Rails 4, your app's bin/ directory contains executables that are versioned
like any other source code, rather than stubs that are generated on demand.

Here's how to upgrade:

  bundle config --delete bin    # Turn off Bundler's stub generator
  rake rails:update:bin         # Use the new Rails 4 executables
  git add bin                   # Add bin/ to source control

You may need to remove bin/ from your .gitignore as well.

When you install a gem whose executable you want to use in your app,
generate it and add it to source control:

  bundle binstubs some-gem-name
  git add bin/new-executable

When you set phone number it actually allows to set password

When I sign up with Google
I see profile settings page
I click "Set phone number"
Then I see form which allows to set password
Then I set password and submit the form
Then I see profile settings page
Then I see button "Change password" in section "Phone number"

screen shot 2017-12-12 at 1 15 33 pm

screen shot 2017-12-12 at 1 15 54 pm

screen shot 2017-12-12 at 1 15 58 pm

screen shot 2017-12-12 at 1 16 06 pm

SocketError

Trying to setup the project locally for the first time. When I start the server and navigate to the application I get the following SocketError. Followed the MacOS instructions and don't know what I am missing.

screen shot 2017-12-01 at 2 47 10 pm

Specs are failing due to removed #to_d method from Rails 4.0

@mod This causes several specs to fail after upgrade to Rails 4.2. We need either update the code either monkey-patch String & BigDecimal prototypes.

  9) Matching::LimitOrder initialize should throw invalid order error for empty attributes
     # No reason given
     Failure/Error:
       expect do
         Matching::LimitOrder.new(type: '', price: '', volume: '')
       end.to raise_error(Matching::InvalidOrderError)

       expected Matching::InvalidOrderError, got #<ArgumentError: invalid value for BigDecimal(): ""> with backtrace:
         # ./app/models/matching/limit_order.rb:12:in `initialize'
         # ./spec/models/matching/limit_order_spec.rb:7:in `new'
         # ./spec/models/matching/limit_order_spec.rb:7:in `block (4 levels) in <top (required)>'
         # ./spec/models/matching/limit_order_spec.rb:6:in `block (3 levels) in <top (required)>'
     # ./spec/models/matching/limit_order_spec.rb:6:in `block (3 levels) in <top (required)>'

Question: Setting up bank connectivity

How do you setup a bank account, that should be used as the platform deposit and withdraw account(fiat)?
Do you need a bank API or something, as I cannot seem to wrap my head around it?
I cannot seem to find any documentation on it?

Thank you in advance.

Specs are failing due to possible changes how capybara matches text (after gem update)

I have this spec failing randomly.

  1) Sign in display captcha after too many failed attempts
     Failure/Error: expect(page).not_to have_content(I18n.t('simple_form.labels.session.captcha'))
       expected not to find text "Captcha" in "Trade Solvency Sign In Sign Up Login Login my account Login Peatio now for you to exchange. Forgot Password? Sign Up × Wrong customer ID or password,please try again. * Sign In E-mail * Sign In Password Set a password which has at least 6 characters and it's better to contain uppercase and lowercase letters and numbers. * Captcha Refresh page to get new captcha. Cancel Maintained by the Helios team with the help of our contributors. Code licensed under MIT, documentation under CC BY 3.0. Currently v0.2.2GitHubDocumentsAboutIssuesReleases". (However, it was found 2 times using a case insensitive search.)
     # ./spec/features/sign_in_spec.rb:27:in `block (2 levels) in <top (required)>'

Signatures randomly don't match when using keypair token authentication

When using generating signature params should be normalized (normally sort by name alphabetically). See https://github.com/rubykube/peatio/blob/master/app/api/api_v2/auth/keypair_authenticator.rb#L67

This error may be produced when client and server used params to generate signature in different order. This error is related to non-proper data structure used to store params – hash since it doesn't provider order guarantees.

Specs are failing due to missing ID in document

  7) show account info user can cancel his own order
     # No reason given
     Got 0 failures and 2 other errors:

     7.1) Failure/Error: click_link page.all('#my_order_tabs_wrapper li').first.text

          NoMethodError:
            undefined method `text' for nil:NilClass
          # ./spec/features/market_trade_history_spec.rb:24:in `block (3 levels) in <top (required)>'
          # ./spec/features/market_trade_history_spec.rb:23:in `block (2 levels) in <top (required)>'

Spec is failing (seed 13602)

This spec is marked as pending (feature still in development) but I am curious if sub-features work correctly because it fails now with different messages. We probably need to check if it is "pending" still.

deepinscreenshot_select-area_20171213165346

Generation of new deposit address is broken

screen shot 2017-12-14 at 7 05 48 pm

Started POST "/deposits/satoshis/gen_address" for ::1 at 2017-12-14 19:02:55 +0200
Processing by Private::Deposits::SatoshisController#gen_address as HTML
  Parameters: {"satoshi"=>{}}
Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 2ms (ActiveRecord: 0.0ms)

ActionController::InvalidAuthenticityToken - ActionController::InvalidAuthenticityToken:
  lib/middleware/security.rb:11:in `call'
  lib/middleware/i18n_js.rb:9:in `call'

No E-Mail is sent when manually registering on Peatio (via sign up form)

Started POST "/auth/identity/register" for 127.0.0.1 at 2017-12-12 13:47:30 +0200
   (0.2ms)  BEGIN
  Identity Exists (0.3ms)  SELECT  1 AS one FROM `identities` WHERE `identities`.`email` = BINARY '[email protected]' LIMIT 1
  SQL (0.3ms)  INSERT INTO `identities` (`email`, `password_digest`, `created_at`, `updated_at`) VALUES ('[email protected]', '$2a$10$w3zXYUEOHTcCdmgUMQT9GugMW6Vu7GmlAi2FErr5yqAfN3V8zmQai', '2017-12-12 13:47:30', '2017-12-12 13:47:30')
   (8.8ms)  COMMIT
Processing by SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "commit"=>"Sign Up", "provider"=>"identity"}
  Member Load (0.3ms)  SELECT  `members`.* FROM `members` WHERE `members`.`disabled` = 0 AND `members`.`id` IS NULL  ORDER BY `members`.`id` ASC LIMIT 1
   (0.3ms)  SELECT SUM(`trades`.`volume`) FROM `trades` WHERE `trades`.`currency` = 3 AND (created_at > '2017-12-11 13:47:30.981670')
   (0.3ms)  SELECT SUM(`trades`.`volume`) FROM `trades` WHERE `trades`.`currency` = 4 AND (created_at > '2017-12-11 13:47:30.998245')
   (0.3ms)  SELECT SUM(`trades`.`volume`) FROM `trades` WHERE `trades`.`currency` = 5 AND (created_at > '2017-12-11 13:47:31.006440')
  CACHE (0.0ms)  SELECT  `members`.* FROM `members` WHERE `members`.`disabled` = 0 AND `members`.`id` IS NULL  ORDER BY `members`.`id` ASC LIMIT 1  [["disabled", false]]
  Authentication Load (0.4ms)  SELECT  `authentications`.* FROM `authentications` WHERE `authentications`.`provider` = 'identity' AND `authentications`.`uid` = '22' LIMIT 1
  Member Load (0.4ms)  SELECT  `members`.* FROM `members` WHERE `members`.`email` = '[email protected]' LIMIT 1
   (0.2ms)  BEGIN
   (0.3ms)  SELECT COUNT(*) FROM `members` WHERE `members`.`sn` = 'PEA4FL2SW5CTIO'
  Member Exists (0.3ms)  SELECT  1 AS one FROM `members` WHERE `members`.`email` = BINARY '[email protected]' LIMIT 1
  SQL (0.4ms)  INSERT INTO `members` (`email`, `activated`, `sn`, `created_at`, `updated_at`) VALUES ('[email protected]', 0, 'PEA4FL2SW5CTIO', '2017-12-12 13:47:31', '2017-12-12 13:47:31')
  SQL (0.3ms)  DELETE FROM `read_marks` WHERE `read_marks`.`readable_type` = 'Comment' AND `read_marks`.`member_id` = 33
  SQL (0.3ms)  INSERT INTO `read_marks` (`readable_type`, `member_id`, `timestamp`) VALUES ('Comment', 33, '2017-12-12 13:47:31')
  SQL (0.3ms)  DELETE FROM `read_marks` WHERE `read_marks`.`readable_type` = 'Ticket' AND `read_marks`.`member_id` = 33
  SQL (0.2ms)  INSERT INTO `read_marks` (`readable_type`, `member_id`, `timestamp`) VALUES ('Ticket', 33, '2017-12-12 13:47:31')
  IdDocument Exists (0.3ms)  SELECT  1 AS one FROM `id_documents` WHERE `id_documents`.`member_id` = BINARY 33 LIMIT 1
  SQL (0.3ms)  INSERT INTO `id_documents` (`member_id`, `aasm_state`, `created_at`, `updated_at`) VALUES (33, 'unverified', '2017-12-12 13:47:31', '2017-12-12 13:47:31')
  Account Load (0.4ms)  SELECT `accounts`.* FROM `accounts` WHERE `accounts`.`member_id` = 33
  Account Exists (0.3ms)  SELECT  1 AS one FROM `accounts` WHERE (`accounts`.`member_id` = BINARY 33 AND `accounts`.`currency` = 1) LIMIT 1
  SQL (0.3ms)  INSERT INTO `accounts` (`currency`, `balance`, `locked`, `member_id`, `created_at`, `updated_at`) VALUES (1, 0.0, 0.0, 33, '2017-12-12 13:47:31', '2017-12-12 13:47:31')
  Account Exists (0.3ms)  SELECT  1 AS one FROM `accounts` WHERE (`accounts`.`member_id` = BINARY 33 AND `accounts`.`currency` = 2) LIMIT 1
  SQL (0.2ms)  INSERT INTO `accounts` (`currency`, `balance`, `locked`, `member_id`, `created_at`, `updated_at`) VALUES (2, 0.0, 0.0, 33, '2017-12-12 13:47:31', '2017-12-12 13:47:31')
  Account Exists (0.3ms)  SELECT  1 AS one FROM `accounts` WHERE (`accounts`.`member_id` = BINARY 33 AND `accounts`.`currency` = 3) LIMIT 1
  SQL (0.3ms)  INSERT INTO `accounts` (`currency`, `balance`, `locked`, `member_id`, `created_at`, `updated_at`) VALUES (3, 0.0, 0.0, 33, '2017-12-12 13:47:31', '2017-12-12 13:47:31')
  ActsAsTaggableOn::Tagging Load (0.4ms)  SELECT `taggings`.* FROM `taggings` WHERE `taggings`.`taggable_id` = 33 AND `taggings`.`taggable_type` = 'Member'
   (0.4ms)  COMMIT
   (0.2ms)  BEGIN
  Authentication Exists (0.3ms)  SELECT  1 AS one FROM `authentications` WHERE (`authentications`.`provider` = BINARY 'identity' AND `authentications`.`member_id` = 33) LIMIT 1
  Authentication Exists (0.3ms)  SELECT  1 AS one FROM `authentications` WHERE (`authentications`.`uid` = BINARY '22' AND `authentications`.`provider` = 'identity') LIMIT 1
  SQL (0.3ms)  INSERT INTO `authentications` (`member_id`, `uid`, `provider`, `created_at`, `updated_at`) VALUES (33, '22', 'identity', '2017-12-12 13:47:31', '2017-12-12 13:47:31')
   (6.5ms)  COMMIT
   (0.2ms)  BEGIN
  Token::Activation Load (2.3ms)  SELECT  `tokens`.* FROM `tokens` WHERE `tokens`.`type` IN ('Token::Activation') AND (expires_at > '2017-12-12 13:47:31.303144' and is_used = 0) AND `tokens`.`member_id` = 33  ORDER BY `tokens`.`created_at` DESC LIMIT 1
  SQL (0.4ms)  INSERT INTO `tokens` (`type`, `member_id`, `token`, `expires_at`, `created_at`, `updated_at`) VALUES ('Token::Activation', 33, 'ea12947e3b582cf1d0c14178af63d165', '2017-12-12 14:17:31', '2017-12-12 13:47:31', '2017-12-12 13:47:31')
   (6.5ms)  COMMIT
   (0.2ms)  BEGIN
  SQL (0.3ms)  INSERT INTO `signup_histories` (`member_id`, `ip`, `accept_language`, `ua`, `created_at`) VALUES (33, '127.0.0.1', 'en-US,en;q=0.9,ru;q=0.8,bg;q=0.7,fr;q=0.6,uk;q=0.5,pt;q=0.4', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36', '2017-12-12 13:47:31')
   (5.2ms)  COMMIT
Redirected to http://localhost:3000/settings
Completed 302 Found in 363ms (ActiveRecord: 32.7ms)

Something strange occurs when exiting Rails application

See the logs:

Started POST "/funds/gen_address" for ::1 at 2017-12-12 12:57:16 +0200
Processing by Private::FundsController#gen_address as */*
  Member Load (0.3ms)  SELECT  `members`.* FROM `members` WHERE `members`.`disabled` = 0 AND `members`.`id` = 30  ORDER BY `members`.`id` ASC LIMIT 1
  Account Load (0.3ms)  SELECT `accounts`.* FROM `accounts` WHERE `accounts`.`member_id` = 30
  IdDocument Load (0.3ms)  SELECT  `id_documents`.* FROM `id_documents` WHERE `id_documents`.`member_id` = 30 LIMIT 1
  PaymentAddress Load (0.2ms)  SELECT `payment_addresses`.* FROM `payment_addresses` WHERE `payment_addresses`.`account_id` = 60
  PaymentAddress Load (0.3ms)  SELECT `payment_addresses`.* FROM `payment_addresses` WHERE `payment_addresses`.`account_id` = 61
  Rendered text template (0.0ms)
Completed 200 OK in 56ms (Views: 0.6ms | ActiveRecord: 1.5ms)
^C- Gracefully stopping, waiting for requests to finish
=== puma shutdown: 2017-12-12 12:58:08 ===
- Goodbye!
Exiting
Usage:
  rails new APP_PATH [options]

Options:
  -r, [--ruby=PATH]                                      # Path to the Ruby binary of your choice
                                                         # Default: /Users/yaroslav/.rbenv/versions/2.4.2/bin/ruby
  -m, [--template=TEMPLATE]                              # Path to some application template (can be a filesystem path or URL)
      [--skip-gemfile], [--no-skip-gemfile]              # Don't create a Gemfile
  -B, [--skip-bundle], [--no-skip-bundle]                # Don't run bundle install
  -G, [--skip-git], [--no-skip-git]                      # Skip .gitignore file
      [--skip-keeps], [--no-skip-keeps]                  # Skip source control .keep files
  -O, [--skip-active-record], [--no-skip-active-record]  # Skip Active Record files
  -S, [--skip-sprockets], [--no-skip-sprockets]          # Skip Sprockets files
      [--skip-spring], [--no-skip-spring]                # Don't install Spring application preloader
  -d, [--database=DATABASE]                              # Preconfigure for selected database (options: mysql/oracle/postgresql/sqlite3/frontbase/ibm_db/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc)
                                                         # Default: sqlite3
  -j, [--javascript=JAVASCRIPT]                          # Preconfigure for selected JavaScript library
                                                         # Default: jquery
  -J, [--skip-javascript], [--no-skip-javascript]        # Skip JavaScript files
      [--dev], [--no-dev]                                # Setup the application with Gemfile pointing to your Rails checkout
      [--edge], [--no-edge]                              # Setup the application with Gemfile pointing to Rails repository
      [--skip-turbolinks], [--no-skip-turbolinks]        # Skip turbolinks gem
  -T, [--skip-test-unit], [--no-skip-test-unit]          # Skip Test::Unit files
      [--rc=RC]                                          # Path to file containing extra configuration options for rails command
      [--no-rc], [--no-no-rc]                            # Skip loading of extra configuration options from .railsrc file

Runtime options:
  -f, [--force]                    # Overwrite files that already exist
  -p, [--pretend], [--no-pretend]  # Run but do not make any changes
  -q, [--quiet], [--no-quiet]      # Suppress status output
  -s, [--skip], [--no-skip]        # Skip files that already exist

Rails options:
  -h, [--help], [--no-help]        # Show this help message and quit
  -v, [--version], [--no-version]  # Show Rails version number and quit

Description:
    The 'rails new' command creates a new Rails application with a default
    directory structure and configuration at the path you specify.

    You can specify extra command-line arguments to be used every time
    'rails new' runs in the .railsrc configuration file in your home directory.

    Note that the arguments specified in the .railsrc file don't affect the
    defaults values shown above in this help message.

Example:
    rails new ~/Code/Ruby/weblog

    This generates a skeletal Rails installation in ~/Code/Ruby/weblog.
    See the README in the newly created application to get going.
~/Development/my-peatio master $

To reproduce:

  1. bundle exec rails s
  2. Hit CTRL+C

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.