书愿网 - 用书来连接每个人
一个社会化借书平台,通过借出一本书,认识一个朋友
现在的架构是 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 的人!
#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 连接过去后,再次访问页面就不会出这样的错误了
#28 楼 @yedingding 我也不太清楚,但是我现在这个项目用 thin 的脚本启动后,可以正常使用,可是有些还是有些用户反应 500 的错误,我查了日志,发现问题类似
#29 楼 @sanivbyfish hi~ 这个问题实在是有点诡异。没什么头绪。不过既然你说断开连接就有问题,连接上又会好的话。你可以试试看在 screen
(或者 tmux
) 里面跑这个命令 (尽管我觉得这一点帮助都没有,不过在没办法的情况下还是试试看吧). 跑在 screen
(或者 tmux
) 下的进程不会随着你 ssh 的断开而终止 (前提是你使用 detach 让它跑后台)
#34 楼 @sanivbyfish 也就说是现在根本没有与 nginx 打交道,直接访问 rails server,暂时可以不管 nginx 的权限配置
试过直接用thin
这个命令启动吗?
#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
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 参数
#38 楼 @sanivbyfish
nohup thin -p 4002 -d start &
这样可以不?
实现不行还是写成服务,debian 的写法 https://gist.github.com/3344162
#43 楼 @sanivbyfish 在 development 模式我有个项目偶尔也遇到个 load 方法的错误,估计是 rails 在 development 模式的 auto reload code 导致的,你在 production 模式有此问题吗?
#28 楼 @yedingding #23 楼 @sanivbyfish 被点名后硬着头皮看了一下,我也没有头绪,其实最简单的方式可能还是用 screen 这种方式绕开(可以试试,不过也可能绕不开),如果楼主真的要彻底解决问题可能需要去现场了,可以联系我 gtalk: [email protected]
#54 楼 @sanivbyfish 连 screen 都不行,那估计你还没有找对真正的关键现场,我怀疑是你环境的特殊问题,如果信得过,给个权限,我帮你到机器上看看吧
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/ 试试
#64 楼 @sanivbyfish 奇怪,不过还是建议你放在/usr/local 下试试,之前我的项目放在 /home 下,但是断开 ssh 后,log/css 文件都不起作用了,然后放在/usr/local 下就好了
RSS 用有道阅读订阅 "没有找到与 \"http:\/\/www.ibookwish.com\/bbs\/topics\/feed\" 相符合的订阅"