分享 分享下我最近做的网站吧 (第一次借到一本书)

sanvi · 2012年11月20日 · 最后由 sanivbyfish 回复于 2012年11月27日 · 9303 次阅读

http://www.ibookwish.com

书愿网- 用书来连接每个人

一个社会化借书平台,通过借出一本书,认识一个朋友

现在的架构是 Nginx + Rails + Thin + Mongodb

邮件服务器是自己搭建的 主要用的 Postfix,关于邮件验证这块大家感兴趣可以聊聊,现在大部分邮件已经不进入垃圾箱了

网站主要使用 bootstrap 外加一些自己写的 CSS

2 个月从 0 开始,完全没接触 RoR 的人

想必大家经常看到我问问题吧~这次我不做伸手党了,大家有什么想知道的可以问,我很乐意回答,毕竟这个网站靠大家才能搭建起来的

PS.现在很苦恼我的一个问题,希望有大神解救 http://stackoverflow.com/questions/13447698/rails-in-production-environment-not-working-but-its-working-in-development-envi

LoadError (cannot load such file -- mail/fields/mime_version_field):
  mail (2.4.4) lib/mail/field.rb:213:in `new_field'
  mail (2.4.4) lib/mail/field.rb:156:in `create_field'
  mail (2.4.4) lib/mail/field.rb:87:in `initialize'
  mail (2.4.4) lib/mail/header.rb:160:in `new'
  mail (2.4.4) lib/mail/header.rb:160:in `[]='
  mail (2.4.4) lib/mail/message.rb:1224:in `[]='

An ActionView::Template::Error occurred in topics#show:

cannot load such file -- html/tokenizer actionpack (3.2.8) lib/action_controller/vendor/html-scanner/html/sanitizer.rb:18:in >`tokenize'

会经常出现类似的错误,加载不到啊,或者找不到文件啊,我怀疑是权限的问题

还有一点很奇怪,我创建一个新的 rails,然后跑 development,用 rails s -d 启动,然后我断开 SSH,就报类似上面的一些错误

我昨天尝试用我自己的用户重新安装了 rvm ruby rails,结果问题依旧存在。今天有个哥们说路径的问题,我尝试把文件夹放到我当前用户的 home 目录下,结果报出了浏览器级别的 500,而不是 ror 程序级别的 500,所以我猜想可能是 RVM 的权限的问题,之后 google 下了,其实 RVM 可以有个全局的,会安装到/usr/local/rvm,而不是 home/xx/.rvm,之后我新建一个新的用户,把他文件夹的所属改成新用户,并把新用户加到 RVM 组里面去,好像问题就解决了,不会马上重现出来了,不过还是得观察

具体可以参考 rvm 安装的 Multi-User

https://rvm.io/rvm/install/

这里有篇关于 Nginx-Passenger 的权限问题的文章大家可以看下 http://chloerei.com/2012/08/26/rails-deploy-guides-2-linux-user-rights/

之前我的项目的启动脚本在

启动脚本 /etc/init.d/thin
配置文件 /etc/thin/thin.yml
他们的权限都是root,我可以不用sudo直接启动,考虑到上面那篇文件,可能系统把他降级为一个nobody的账户,nobody的账户或许没读取我账户.rvm的权限,导致500错误,所以我尝试把上面2个文件搬到我Application下面

今天第一次在自己的网站上借到书,非常有成就感,大家都是非常 nice 的人!

恩?怎么参与内测

#1 楼 @ywencn 申请了,我给你发邮件就行了:)

为什么不给我发测试账号?

发了,不过有个很诡异的后缀没发邀请~

#4 楼 @sanivbyfish 发哪去了,没收到啊

#5 楼 @fresh_fish 你的邮箱是?

#4 楼 @sanivbyfish 靠,那个是我的,快发给我

#7 楼 @ywencn = =发了,我还以为是捣乱的,哈哈!

大家别好奇了。。。帮我解决下问题吧。。。😭 500 错误很严重的,这个错误解决不了,会影响推广~

#9 楼 @sanivbyfish 贴点内容,如果那个错误文件

#11 楼 @w7938940 这个网站也是别人看了我的网站之后告诉我的,不过大家做的事情不太一样,他貌似做图书的漂流,我是线下直接借书

#10 楼 @yedingding 修改了帖子了,把问题贴了出来,这个问题太奇怪了

希望可以分享一下发邮件的经验

#5 楼 @fresh_fish jimmy.huangjin@gmail.com

开源了么?

#14 楼 @suupic 现在的发邮件的方案是跨机器发,通过 API 来发,因为解决不了跨机进垃圾箱的问题,你可以找一些关键字 PTR DKIM SPF,然后 rails 主要在于 mail 和 gem 'resque' gem 'resque_mailer' 这两个

#15 楼 @fresh_fish 没看到你申请内测,我直接邀请你把

#16 楼 @zgm 暂时没打算,因为就算开源了也不会有人帮我贡献代码- -

#14 楼 @suupic resque 直接 redis 整合,你可以也查下相关的资料

#13 楼 @sanivbyfish 描述一下你是如何启动这些进程的。你贴的错误是同一个问题还是两个不同的问题。cpanel_app.coffee 的第一行是什么?你是怎么加载这个文件的?

申请了

#21 楼 @yedingding 我贴的是在我机器上会出现的问题,举个例子,我在服务器上新建一个项目,然后 rails s -p 4000 -d ,然后我断开 SSH 连接就出现 500 的错误,然后我回去查看 log

Started GET "/" for 119.147.146.118 at 2012-11-20 12:59:52 +0800
Processing by TopicsController#index as HTML
  MOPED: 127.0.0.1:27017 COMMAND      database=admin command={:ismaster=>1} (0.8128ms)
  MOPED: 127.0.0.1:27017 QUERY        database=kaichangbai_dev collection=topics selector={} flags=[:slave_ok] limit=0 skip=0 fields=nil (0.3178ms)
  Rendered topics/index.html.erb within layouts/application (3.7ms)
Completed 500 Internal Server Error in 56ms

LoadError (cannot load such file -- action_view/template/error):
  app/controllers/topics_controller.rb:17:in `index'

会有这样的错误,但是我 ssh 连接过去后,再次访问页面就不会出这样的错误了

#17 楼 @sanivbyfish 如果开源的话,别人把你代码在本地运行一遍查找问题会快一点。

#24 楼 @zgm 这个问题跟代码关系不大,可能是我服务器某些地方出问题

#23 楼 @sanivbyfish 你 ssh 进去之后有没有开什么进程?

#26 楼 @zgm 没,什么操作都不做,网站就正常访问

#23 楼 @sanivbyfish 有点奇怪,按理 damonize 后已经跟当前终端进程没关了。cc to @fsword @ruohanc

#28 楼 @yedingding 我也不太清楚,但是我现在这个项目用 thin 的脚本启动后,可以正常使用,可是有些还是有些用户反应 500 的错误,我查了日志,发现问题类似

@huacnlee cc 这个问题

#29 楼 @sanivbyfish hi~ 这个问题实在是有点诡异. 没什么头绪. 不过既然你说断开连接就有问题, 连接上又会好的话. 你可以试试看在 screen(或者 tmux) 里面跑这个命令 (尽管我觉得这一点帮助都没有, 不过在没办法的情况下还是试试看吧). 跑在 screen(或者 tmux) 下的进程不会随着你 ssh 的断开而终止 (前提是你使用 detach 让它跑后台)

#31 楼 @ruohanc 你的意思是跑一个不会断开的 SSH 连接吗?

你直接访问 4000 端口也报这错吗?

#33 楼 @cxh116 在断开 SSH 连接过去会报错,但是连接后就不会

#34 楼 @sanivbyfish 也就说是现在根本没有与 nginx 打交道,直接访问 rails server,暂时可以不管 nginx 的权限配置

试过直接用thin这个命令启动吗?

#31 楼 @ruohanc 并不是终止程序了,只是程序加载不到某些文件

#36 楼 @sanivbyfish 你就 thin -D 命令直接启动应该没有问题 看了一下 rails server daemon 的实现,是直接调用 rack 的实现,而 rack 判断 ruby 进程如果大于 1.8,直接调用 ruby 的 Process.daemon 实现 Process.daemon 会改变当前目录的 http://apidock.com/ruby/Process/daemon/class

rack

def daemonize_app
  if RUBY_VERSION < "1.9"
    exit if fork
    Process.setsid
    exit if fork
    Dir.chdir "/"
    STDIN.reopen "/dev/null"
    STDOUT.reopen "/dev/null", "a"
    STDERR.reopen "/dev/null", "a"
  else
    Process.daemon
  end
end

#37 楼 @cxh116 我直接使用 thin -p 4002 -d start 启动后,断开 SSH 后还是包#23 楼 的错误,而且很奇怪的一点是,我用 kill 杀死了 4002 这个端口的进程后,再次启动,他的 PID 一样

Daemon options:
    -d, --daemonize                  Run daemonized in the background
    -l, --log FILE                   File to redirect output (default: log/thin.log)
    -P, --pid FILE                   File to store PID (default: tmp/pids/thin.pid)
    -u, --user NAME                  User to run daemon as (use with -g)
    -g, --group NAME                 Group to run daemon as (use with -u)
        --tag NAME                   Additional text to display in process listing

考虑加上 -u -g 参数

#39 楼 @cxh116 一样的问题,我退出后,还是会出 500 的错误

#38 楼 @sanivbyfish nohup thin -p 4002 -d start &这样可以不? 实现不行还是写成服务, debian 的写法 https://gist.github.com/3344162

#41 楼 @cxh116 我尝试写成服务吧

#41 楼 @cxh116 跑服务也有同样问题

@hayeah 帮忙看个错误

申请了 关注一下

#43 楼 @sanivbyfish 在 development 模式我有个项目偶尔也遇到个 load 方法的错误,估计是 rails 在 development 模式的 auto reload code 导致的,你在 production 模式有此问题吗?

#46 楼 @cxh116 有的,production 会出现,但是不频繁,偶尔会有些用户反应出现 500,我查日志后发现也是这样的问题,我现在用了个很挫的办法解决,先把 SSH 的连接心跳改成 60,然后找一台不会关机的电脑长期 SSH 连着,但这总不是办法。。。哎

#47 楼 @sanivbyfish 这样解决问题太麻烦了,加我 gtalk: mr.mangege,

#48 楼 @cxh116 应该已经发 gtalk 给你了

root 用户?没人觉得项目路径很异常吗。。

#28 楼 @yedingding #23 楼 @sanivbyfish 被点名后硬着头皮看了一下,我也没有头绪,其实最简单的方式可能还是用 screen 这种方式绕开(可以试试,不过也可能绕不开),如果楼主真的要彻底解决问题可能需要去现场了,可以联系我 gtalk: li.jianye@gmail.com

#51 楼 @fsword 不用 rails s -d 而是直接用 monit / god 这些来管理可能可以绕开这个问题

#52 楼 @yedingding 我不报希望,不过楼主可以试试

#51 楼 @fsword 试过,没办法绕开

#52 楼 @yedingding 现在已经不是用 rails s -d 来启动了,用 thin server,但是还是没办法绕开

@sanivbyfish 注册进去了,想法挺好的,不过就是没有广州的....

#56 楼 @AlphaLiu 有广州这个城市,不过好像没什么人,因为楼主在深圳,所以可能会在先入手深大

#54 楼 @sanivbyfish 连 screen 都不行,那估计你还没有找对真正的关键现场,我怀疑是你环境的特殊问题,如果信得过,给个权限,我帮你到机器上看看吧

#57 楼 @sanivbyfish 哦,原来我默认城市是深圳...难怪那个附近城市是深圳...

#59 楼 @AlphaLiu 因为是通过 IP 取的,所以不一定准

#58 楼 @fsword 我加了你 gtalk 了

LoadError (cannot load such file -- mail/fields/mime_version_field):
  mail (2.4.4) lib/mail/field.rb:213:in `new_field'
  mail (2.4.4) lib/mail/field.rb:156:in `create_field'
  mail (2.4.4) lib/mail/field.rb:87:in `initialize'
  mail (2.4.4) lib/mail/header.rb:160:in `new'
  mail (2.4.4) lib/mail/header.rb:160:in `[]='
  mail (2.4.4) lib/mail/message.rb:1224:in `[]='

最近经常报的错误

路径问题,楼主是不是把项目部署在 /home/……下了? 断开 SSH 后,程序应该没有访问用户目录的权限了, 在其它目录,比如 /usr/local/ 试试

#63 楼 @keating 我放在 opt 下 drwxrwxr-x 14 sanvi sanvi 4096 2012-11-21 21:58 kaichangbai-test

直接就可以注册

#65 楼 @lidashuang 哈哈,给你发现了!

#66 楼 @sanivbyfish 我猜你懒的写验证了,被我猜中了,哈哈。网站不错。

#67 楼 @lidashuang 谢谢啊,我也是刚学 ruby 没多久,这个问题让我蛮郁闷的

#64 楼 @sanivbyfish 奇怪,不过还是建议你放在/usr/local 下试试,之前我的项目放在 /home 下,但是断开 ssh 后,log/css 文件都不起作用了,然后放在/usr/local 下就好了

server not found

#70 楼 @flea 呃,我这边正常,还是上面的那个问题,不时会出现加载不到的错误,我尝试用全局的 rvm

申请内测,没有收到邮件,再次申请,邮箱以占用

RSS 用有道阅读订阅 "没有找到与 \"http:\/\/www.ibookwish.com\/bbs\/topics\/feed\" 相符合的订阅"

#52 楼 @yedingding 我现在不用 god,用 runit。蛮爽的工具,很 unixy。帮 runit 做个广告,哈~

#72 楼 @perfectfoolish 邮件是我看到申请发的~

#74 楼 @sparkrico 哥们你怎么把这个秘密爆出来呢= =

#75 楼 @hayeah ruint god 都是啥- -,都跑到这了。。哈哈

#77 楼 @sanivbyfish 这真不是故意的,看@perfectfoolish 那么着急,我看着也着急,所以就。。。

#74 楼 @sparkrico 哈哈!我是这样成功注册的,邮箱已占用,那我就找回密码!成功了!

#76 楼 @sanivbyfish 怎么没有邮件自动系统啊,还是手动的!

#81 楼 @perfectfoolish 一申请就自动发邀请,那要内测干啥,直接把注册开放不就得了

#75 楼 @hayeah I hate runit,用起来超级不爽.... 我现在只用 monit

#83 楼 @yedingding 哈哈,手动设置 runit 是挺烦的。我很喜欢 runit 的 unix 风格

建议给 .brand 加上 style="white-space: nowrap;"

#85 楼 @yetone 好的,谢谢,我明天修复下

sanvi 谁能告诉一些 Cache 的应用与建议 中提及了此贴 04月03日 10:56
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册