Coder Social home page Coder Social logo

dhonig / spree_multi_tenant Goto Github PK

View Code? Open in Web Editor NEW

This project forked from stefansenk/spree_multi_tenant

0.0 1.0 0.0 115 KB

Adds multi-tenant support to Spree. Allows completely separate Spree sites with separate admins to be run from the same installation.

License: BSD 3-Clause "New" or "Revised" License

Ruby 99.76% JavaScript 0.24%

spree_multi_tenant's Introduction

SpreeMultiTenant

Adds multi-tenant support to Spree. Allows completely separate Spree sites with separate admins to be run from the same installation.

Install

Gemfile:

gem 'spree', :git => 'git://github.com/spree/spree.git', :branch => '1-1-stable'
gem 'spree_multi_tenant', :git => 'git://github.com/stefansenk/spree_multi_tenant.git'

$ bundle install

Generate and run migrations:

$ rake spree_multi_tenant:install:migrations
$ rake db:migrate

Update the domain for the tenant in the database:

Spree::Tenant.first.update_attribute(:domain, 'shop.dev')

Usage

Create a new tenant:

$ rake spree_multi_tenant:create_tenant domain=mydomain.com code=mydomain

Tenant specific templates:

app/tenants/mydomain/views

With other Spree plugins

Any other models that are tenant specific will need to have the tenant_id field and multitenant scope added.

Database migration:

class AddTenantToSomeModels < ActiveRecord::Migration
  def change
    models = [
      Spree::Page,
      Spree::PaypalAccount,
      Spree::ProductGroup
    ]
    models.each do |model|
      table = model.to_s.tableize.gsub '/', '_'
      add_column table, :tenant_id, :integer
      add_index table, :tenant_id
    end
  end
end

Add scope to the models:

models = [
  Spree::Page,
  Spree::PaypalAccount,
  Spree::ProductGroup
]
models.each do |model|
  model.class_eval do
    belongs_to :tenant
    belongs_to_multitenant
  end
end

In a Raketask

Multitenant.with_tenant(Spree::Tenant.find_by_code('mydomain')) do
  SpreeMultiTenant.init_preferences

  # Do stuff for tenant
  # e.g. Spree::Product.first
end

Testing

$ cd spree_multi_tenant
$ bundle install
$ bundle exec rake test_app
$ bundle exec rspec spec

TODO

  • Allow tenant specific Deface overrides.
  • Allow same user email address to be used on multiple sites.
  • Allow same parmalink to be used on multiple sites.
  • Example CSS and JS files.

Copyright (c) 2012 Stefan Senk, released under the New BSD License

spree_multi_tenant's People

Contributors

dhonig avatar stefansenk avatar

Watchers

 avatar

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.