Git Product home page Git Product logo

spree_shared's Introduction

⚠️ Deprecation notice ⚠️

Spree supports multi-store scenarios out of the box. The apartment gem, which this gem depends on is not maintained anymore, hence we won't maintain and support this gem anymore.

Spree Shared

Build Status Code Climate

Multiple stores using a single Spree application instance.

Uses request subdomain to swap database, Rails cache (preferences), image paths.


Installation

  1. Add to your Gemfile:

    gem 'spree_shared', github: 'spree-contrib/spree_shared', branch: 'master'

    Make sure your config/database.yml has valid db connection.

  2. Create config/initializers/apartment.rbwith the following command:

    bundle exec rails generate apartment:install
  3. Search for following line inside config/initializers/apartment.rb:

      config.tenant_names = lambda { ToDo_Tenant_Or_User_Model.pluck :database }

    And change it to include two sample subdomains:

      config.tenant_names = %w(store1 store2)
  4. Bootstrap sample stores:

    bundle exec rake spree_shared:bootstrap['store1']
    bundle exec rake spree_shared:bootstrap['store2']
  5. Setup local subdomains for sample stores, as spree_shared uses by default subdomain routing you need to confirm some local domains such as:

    store1.spree.dev store2.spree.dev

    This can be done using Pow or editing your local /etc/hosts file.

  6. Set namespace for cache engine in development.rb and/or production.rb

    config.cache_store = :memory_store, { namespace: -> { Apartment::Tenant.current } }

Setting Store Preferences

If you'd like to set preferences for every store you can do so in your config/initializers/spree.rb initializer by iterating over each store, and then setting it's preference. Since this is multi-tenant with each store having their own database the usual Spree.config block can't be used as it only sets the preference for a single database.

Here is an example:

require 'spree_shared/tenant_decorator'

Apartment::Tenant.each do |tenant_name| # also each_with_default available
  Spree::Config.auto_capture = true
rescue
  puts "  Failed to set up config for store '#{tenant_name}'"
end

Contributing

See corresponding guidelines


Copyright (c) 2013-2015 Spree Commerce Inc, and other contributors, released under the New BSD License

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.