ShopQi 是一个多网店电子商务管理系统,代码完全开源。
地址:https://github.com/saberma/shopqi
有关 ShopQi 的任何问题或疑问,可以发到这里(长期有效),我会尽快回复。
如果把 shop 功能同用户,博客,文章等功能分离,就美好了。 如果很强,可以单独卖 shop engine
shop 里面的支付接口支持等,可做文章很多啊
我比较喜欢异想天开,随便考虑了一下,没有仔细看过你的代码,仅用于头脑风暴。
--插件形式的 shop engine 机会很大哦,如果能做成插件,所有的企业都需要一个 online shop 平台,更别提个人了,只是如何个插法?
--博客和宣传 博客和宣传其实用一个 cms 可以解决,解决商品信息介绍的问题
--可以支持价目表,不同的服务配置等
--先做好一件商品,再做商城就比较容易
--类似于 jekii 博客平台,本地编辑,git 部署,用户一键更新站点 本地编辑商品信息,一键 git push 上传,可以想象上传那些图片在线编辑太烦人了
--支持各种支付接口
-独立的数据库?因为在人家基础上搞比较麻烦
--支持后台访问统计
--角色支持? 客服,管理员
--在线聊天支持,用 node.js 搭一个聊天室?
--提供 API
完美的 shop 绝对有很大价值
上网站看了下 shopqi,哇塞,已经做的很不错了,有前途哦
@hunter --插件形式的 shop engine 当初做这个的时候就是设想大多数企业都需要 online shop,但是没有做成插件,而是以 SAAS 的方式提供服务。 例如:企业有官网 example.com,只要:
--博客和宣传 博客已经有了,宣传也有了 (宣传在 ShopQi 称之为页面)。博客和页面的基本差异就是前者有一定的时效性,比如商城本周开展优惠活动,就可以用博客发布。而关于商城的一些介绍信息就可以通过页面这个功能来发布。
--可以支持价目表,不同的服务配置等 如果以后有精力去做单机版本,将会是开源免费的,不会收费。
--先做好一件商品,再做商城就比较容易 这个没看明白具体的意思?
--类似于 jekii 博客平台,本地编辑,git 部署,用户一键更新站点,本地编辑商品信息,一键 git push 上传,可以想象上传那些图片在线编辑太烦人了 这个功能分两个部分:
--支持各种支付接口 这个暂时已经支持支付宝、财付通,即将支持快钱还有更多的接口。关于担保交易时的发货处理还不够细(在 ShopQi 修改订单为已发货时支付宝要同步更新),这个待下一步继续完善。
-独立的数据库?因为在人家基础上搞比较麻烦 如果是单机版,数据库是独立的
--支持后台访问统计 现在不支持更细的访问统计,现用 google 或百度的
--角色支持?客服,管理员 不支持角色,降低复杂度。现在只支持功能权限的直接控制,例如把订单处理的功能授权给张三。
--在线聊天支持,用 node.js 搭一个聊天室? 在第一版的时候是做了的,后来去掉了,需求不是很大,就不面面俱到了。
--提供 API 关键业务已经有 api
@hunter 谢谢你提供的信息
@hunter 非常赞同你的观点。
@mobiwolf 现在还是自己 diy 服务器,等一般时间云计算成熟些了,再整体迁徙过去,之后再把这些也分享出来。 diy 服务器的过程有写出来,主要是【后记】部分才是最终选择的方案。 http://saberma.me/other/2011/10/21/how-to-diy-a-server.html
@Levan 就是服务器是自己组装的,然后托管在深圳的双线机房。绝大多数地区访问速度还是不错的。再加上 Sprockets,后续访问不需要再重新加载 js,css 之类的,会快多。后台管理的大多数操作都是 ajax 实现,列表中的数据也都是通过 json 方式加载,速度也会有不少提升。 还没有进行优化,速度提升的空间还很大。
@mobiwolf 明白了
@saberma 试用了,访问速度挺不错。只是字体真的不是很好看,正准备看你的源码。不过想弱弱的问下,你的图片是如何处理的?打开的速度很快,也有一个放大功能,可否简单的介绍下呢?
@ruby_sky 图片没经过特殊处理,只存储原图,使用 dragonfly 生成各种规格的缩略图,用 rack-cache 缓存。 有些商店的放大功能是使用 js 插件 Cloud Zoom 来实现的。
sudo bundle install
/var/www0/shopqi/Gemfile:22:in `evaluate': compile error (SyntaxError)
/var/www0/shopqi/Gemfile:22: syntax error, unexpected ':', expecting $end
gem 'rack-cache', require: 'rack/cache‘
git clone 了 github 上面的代码后,提示 gemfile 不对
换了 1.9.2 也出错。。。
/var/www9/shopqi$ sudo bundle install
/opt/ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/dsl.rb:7:in `instance_eval': /var/www9/shopqi/Gemfile:23: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' (SyntaxError)
gem 'carrierwave'
^
from /opt/ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/dsl.rb:7:in `evaluate'
from /opt/ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/definition.rb:17:in `build'
from /opt/ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler.rb:136:in `definition'
from /opt/ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/cli.rb:226:in `install'
from /opt/ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/vendor/thor/task.rb:22:in `run'
from /opt/ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
from /opt/ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/vendor/thor.rb:246:in `dispatch'
from /opt/ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/vendor/thor/base.rb:389:in `start'
from /opt/ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/bin/bundle:13:in `<top (required)>'
from /usr/bin/bundle:19:in `load'
from /usr/bin/bundle:19:in `<main>'
Installing kgio (2.6.0) with native extensions Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/Users/SanviLu/Documents/rails_one_click/ruby/bin/ruby extconf.rb checking for CLOCK_MONOTONIC in time.h... no checking for CLOCK_MONOTONIC() in time.h... no checking for clockid_t in time.h... no checking for clock_gettime() in -lrt... no checking for t_open() in -lnsl... no checking for socket() in -lsocket... no checking for poll() in poll.h... yes checking for getaddrinfo() in sys/types.h,sys/socket.h,netdb.h... yes checking for getnameinfo() in sys/types.h,sys/socket.h,netdb.h... yes checking for struct sockaddr_storage in sys/types.h,sys/socket.h... yes checking for accept4() in sys/socket.h... no checking for sys/select.h... yes checking for ruby/io.h... yes checking for rb_io_t.fd in ruby.h,ruby/io.h... yes checking for rb_io_t.mode in ruby.h,ruby/io.h... yes checking for rb_io_t.pathv in ruby.h,ruby/io.h... yes checking for struct RFile in ruby.h,ruby/io.h... yes checking size of struct RFile in ruby.h,ruby/io.h... *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/SanviLu/Documents/rails_one_click/ruby/bin/ruby
--with-rtlib
--without-rtlib
--with-nsllib
--without-nsllib
--with-socketlib
--without-socketlib
/Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:597:in Integer': can't convert nil into Integer (TypeError)
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:597:in
block in try_constant'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:330:in popen'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:330:in
block in xpopen'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:254:in open'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:323:in
xpopen'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:596:in try_constant'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:1156:in
block in check_sizeof'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:790:in block in checking_for'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:284:in
block (2 levels) in postpone'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:254:in open'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:284:in
block in postpone'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:254:in open'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:280:in
postpone'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:789:in checking_for'
from /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/1.9.1/mkmf.rb:1155:in
check_sizeof'
from extconf.rb:40:in `'
Gem files will remain installed in /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/gems/1.9.1/gems/kgio-2.6.0 for inspection.
Results logged to /Users/SanviLu/Documents/rails_one_click/ruby/lib/ruby/gems/1.9.1/gems/kgio-2.6.0/ext/kgio/gem_make.out
An error occurred while installing kgio (2.6.0), and Bundler cannot continue.
Make sure that gem install kgio -v '2.6.0'
succeeds before bundling.
我使用的是 MySQL 数据库,在运行到$ bundle exec rake "shopqi:bootstrap[mysql]"这条命令的时候出现下面的错误: rake aborted! undefined method `collections' for #Product:0xd2e3cec 请问是什么原因啊?
@sanivbyfish 你试下直接安装 kgio 看成不成功?gem install kgio -v '2.6.0'
@yanhuanle 运行 bundle exec rake "shopqi:bootstrap[mysql]" --trace
,看具体是哪条语句抛出的异常
@chucai 没整合淘宝
@sanivbyfish 这个问题很可能是你缺少安装某些系统开发组件。 你可以试下使用 rvm,也很简单的,安装完成后它会有后续安装说明,根据你的操作系统提示你还需要安装哪些系统开发组件供 ruby 使用。
这里出错了:
……
** Execute db:seed:development:shop
rake aborted!
undefined method collections' for #<Product:0xdebf9bc>
/home/lele/.rvm/gems/ruby-1.9.2-p290/gems/activemodel-3.2.7/lib/active_model/attribute_methods.rb:407:in
method_missing'
/home/lele/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.7/lib/active_record/attribute_methods.rb:149:in method_missing'
db/seeds/development/shop.seeds.rb:48:in
block in '
db/seeds/development/shop.seeds.rb:46:in upto'
db/seeds/development/shop.seeds.rb:46:in
'
……
@yanhuanle 之前 product.collections 改成 product.custom_collections 了,db seed 中的脚本没改过来。
现在已经更新代码,git pull 获取最新的就可以了。
kgio 我装不上,我换成 thin
ActionController::RoutingError (No route matches [GET] "/"):
actionpack (3.2.7) lib/action_dispatch/middleware/debug_exceptions.rb:21:in call'
actionpack (3.2.7) lib/action_dispatch/middleware/show_exceptions.rb:56:in
call'
railties (3.2.7) lib/rails/rack/logger.rb:26:in call_app'
railties (3.2.7) lib/rails/rack/logger.rb:16:in
call'
config/initializers/logger.rb:6:in call_with_quiet_assets'
actionpack (3.2.7) lib/action_dispatch/middleware/request_id.rb:22:in
call'
rack (1.4.1) lib/rack/methodoverride.rb:21:in call'
rack (1.4.1) lib/rack/runtime.rb:17:in
call'
activesupport (3.2.7) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
这个是什么问题
@sanivbyfish 你需要使用 lvh.me,因为 localhost 的访问是被忽略的
我刚试了,换成 thin 后访问首页和后台管理正常。如果还有问题请告诉我。
@sanivbyfish 你有加端口吧,thin start -p 4000
启动后,使用 lvh.me:4000
访问
另外,你 ping lvh.me
是什么結果?
@sanivbyfish 可能是你的电信运营商限制访问 lvh.me 了,你可以 试下 42foo.com
你可以看下 http://stackoverflow.com/questions/1562954/public-wildcard-domain-name-to-resolve-to-127-0-0-1 里面提到好几个这样的域名
http://0.0.0.0:4000/ Routing Error No route matches [GET] "/" 配置过程没有出现任何的报错。也出现了上面的问题。。。
@ruby_sky ShopQi 可以看作是一个多商店的管理,根据不同的域名来显示相应的商店
如 a.lvh.me
显示 a 商店,而 b.lvh.me
显示 b 商店,lvh.me
不显示为商店,而显示官方网站;所以通过 0.0.0.0
是无法判断该显示某个商店还是显示官方网站的,请通过 lvh.me
或者 42foo.com
访问。
#51 楼 @saberma
#50 楼 @ruby_sky
今天满怀激动的心情按照 github 上的教材用 mysql 搭建了一个 ShopQi,最终成功了,但是
遇到了以下问题:
1:在运行script/development/use_mysql命令时这,出现错误提示,提示信息为
Replaced "gem 'pg'" to "gem 'mysql2'" in Gemfile.,但是我在 gemfile 里面看到是用
的 mysql2 也,这个问题我就跳过了,没有解决,但是发现貌似它没有用~~
2:但是我想请问下,为什么在本地发布需要 lvh.me:4000 这个域名?这和 localhost 有什么
区别呢?
3:还有就是那些 css,图片之类的文件是怎么处理的,为什么我将 4000 端口换成了 3000
后其 css,图片等资源文件都找不到了。
4:目前正准备做一个校园版的网上格子盟,发现其需求和交互与 ShopQi 很相似,不知道
可否在 ShopQi 上自己深度定制呢,并在校园里发布,就像 Discuz! 一样。
@small_fish__ lvh.me
这个域名是不需要配置的,方便在本地开发环境下使用泛域名访问项目,因为 localhost
是不支持泛域名的,而通过修改 host 文件可以指定某些二级域名指向 127.0.0.1
,但在需要新的二级域名时又要指定一下,很麻烦,所以就有人购买了一些域名,并修改 DNS 的泛域名指向 127.0.0.1
这个地址。
css、图片类文件在开发环境没有进行处理,都是使用 cdn.lvh.me 进行访问,修改端口不会影响的,具体出现找不到资源文件的问题你可以通过 chrome 调试看看,是通过哪些 url 访问资源文件
#56 楼 @saberma 我试着开了一家店,然后提示如下错误是因为什么呢?
错误如下:
Liquid error: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '."position" asc' at line 1: SELECT products
.* FROM products
INNER JOIN custom_collection_products
ON products
.id
= custom_collection_products
.product_id
WHERE custom_collection_products
.custom_collection_id
= 3 ORDER BY "custom_collection_products"."position" asc
难道是 sql 语句和表的字段不匹配吗?
不好意思,回复晚了。
@small_fish__ 我安装 MySQL 后在打开新的网店前台时重现此问题了,已经做了修正,你可以 git pull 最新代码看看。 由于我一直在 PostSQL 环境进行开发,MySQL 环境下没有做太多的测试,所以可能还会有其他一些的问题,如果发现了,你可以联系我协助解决。
@smilekk 还没有盈利呢
@saberma 我在尝试 spree 的时候 1.9.2ok,1.9.3 就不行, 我刚又试了下 1.9.2 的情况 【mysql】 ruby 1.9.2p320 下没问题 ruby-1.9.3-p194 下出错 出错在 Bundler could not find compatible versions for gem "grit": In Gemfile: gollum (>= 0) ruby depends on grit (~> 2.4.1) ruby grit (2.5.0)
总之 1.9.2 似乎更好用
你好 我安装是遇到了问题。 tar (child): /home/duan/Documents/Aptana:无法 open: 没有那个文件或目录 tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now rake aborted! No such file or directory - /home/duan/Documents/Aptana Studio 3 Workspace/shopqi/data/shops/development/1/themes/1/config/settings_data.json
Tasks: TOP => db:setup => db:seed => db:seed:development => db:seed:development:shop
这个是怎么回事儿啊?
@saberma 在么?能帮忙解决一下么? tar (child): /home/duan/Documents/Aptana:无法 open: 没有那个文件或目录 tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now rake aborted! No such file or directory - /home/duan/Documents/Aptana Studio 3 Workspace/shopqi/data/shops/development/1/themes/1/config/settings_data.json
Tasks: TOP => db:setup => db:seed => db:seed:development => db:seed:development:shop 不尽感谢啊!
@saberma 谢谢你的回复! 应该不是吧。。。我已经安装了 rubychina 和 refinery 的源码 都跑的挺正常的啊,而且我看了 shopqi/data/shops/development/1/themes/1/config/目录下是空的,确实没有 settings_data.json 这个文件
有位同学反映的 issue 跟你描述的问题很类似,也是由于没能正常解压出主题模板目录引起的
他是因为 ImageMagic 安装时没有包含 png 格式支持导致的,你可以运行 convert -list configure
检查下
具体可以查看 https://github.com/saberma/shopqi/issues/472
@saberma 先给上感谢,此处省略 1 万字:), 在学习你的代码,仿照做了下,有个问题;
active_merchant-1-23#action_view_helper 方法payment_service_for有这样一行
form_options[:method] = service.form_method
这个 form_method,for_china.alipay.helper 直接从 active-merchnat.helper 的 def form_method; "POST"; end 来;这么以来,我的'payment-form'.methd='POST',我比对发现 shopqi 的 payment-form.method='GET';我的payment-form.method如果是post,会报错ILLEGAL_SIGN
;注掉form_options[:method] = service.form_method
,payment-form.mehtod 改为 get 就没问题;请帮忙解释下;谢谢;
@yeafee 使用 POST 方式时报 ILLEGAL_SIGN,可能是因为支付宝识别不到正确的编码,你可以试下修改 http://git.io/FJKUFw
# self.service_url = 'https://www.alipay.com/cooperate/gateway.do' self.service_url = 'https://www.alipay.com/cooperate/gateway.do?_input_charset=utf-8'
参考:http://club.alipay.com/read-htm-tid-8681631.html 第九步:支付时使用的 POST 表单提交方式
嗨,你好,很感谢你分享的 shopQi,我是 ruby1.9.2 的,我 clone 下来,然后新建了一个 gemset,bundle 的时候,老实安装不了"gem install pg -v '0.11.0'"这个,请问是否是有什么特别的依赖哦,谢谢
回刚刚自己的问题,ubuntu 下的有个解决方法:安装 libpq-dev 即可,在这里找到答案的:http://www.cnblogs.com/ilazysoft/archive/2011/10/10/2205449.html
安装这个 sudo gem install therubyracer -v '0.9.4' 提示需要 libv8,我安装了,但还是有错误,我的 libv8 的版本是 3.3.10.2,对于 libv8 有版本限制吗?
@saberma 请教个问题,shopqi 本身用 haml 做模板引擎,但是店铺的可以定制模版用的是 liquid,为什么在用户自定义模版选 liquid,是 liquid 在这方面有独特的优势么?
@wkj713 你可以访问:/active_admin email: [email protected] password: 666666
具体配置在这里: https://github.com/saberma/shopqi/blob/master/config/app_secret_config.yml.example#L19
@stephen 还没有遇到其他原因,具体得调试才知道了。
按照你说的步骤,选择了 mysql 的方式,出了个错误; MacBook-Air:shopqi-master lxq$ script/development/use_mysql sed: 1: "Gemfile": extra characters at the end of G command Replaced "gem 'pg'" to "gem 'mysql2'" in Gemfile.
请问下我 shopqi 如果不搭建在本地,在开发中如何进行访问?直接通过 ip 访问显示 No route matches [GET],如何解决呢?
请问下我 shopqi 如果不搭建在本地,在开发中如何进行访问?直接通过 ip 访问显示 No route matches [GET],如何解决呢?@saberma
你好,我克隆了项目 shopqi 遇到了问题: #11084 INFO -- : SIGWINCH ignored because we're not daemonized,如何解决?谢谢