部署 部署后 gem 不能使用,但本地正常 (已解决)

phun · 2014年01月05日 · 最后由 phun 回复于 2014年01月05日 · 2657 次阅读

环境:ubuntu + nginx + unicron + rbenv,用 capistrano2 部署。 在 Gemfile 里添加 gem "chartkick"后,在本地一切正常,可部署到服务器,访问页面就报 500 错误,看 log 显示:

ActionView::Template::Error (undefined method `line_chart' for #<Class:0x007fd31f771f88:0x007fd3223b0c48>):

就是那个 gem 里的方法不能使用,但是在 server 下用 bundle show 能看到那个 gem。 bundle install,rbenv rehash 也不行。 经测试新加入的 gem 都不能在 server 上使用,旧的都 ok。 请教是怎么回事?谢谢!

贴 Gemfile 和 Gemfile.lock

在 deploy.rb 中添加 set :bundle_flags, "--local --deployment --quiet"

@hpyhacking gem 太长太乱了,需要看哪一部分呢?

@lb563 谢谢哦,可还是不行。经测试新加入的 gem 都不能在 server 上使用,旧的都 ok。

是不是放到了 group :development 块里面去了

@Ddl1st 木有啊,就是正常放在外面的,真的很诡异。

正常了,谢谢各位,原来是 unicron 重启出问题导致没有加载新的 gem。 用 cap deploy:stop && cap deploy:start 就行,用 cap deploy:restart 不行,但是之前行的。

下面是 unicron 的部分 shell 脚本,网上常用的那个:

CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config
start)
  sig 0 && echo >&2 "Already running" && exit 0
  run "$CMD"
  ;;
stop)
  sig QUIT && exit 0
  echo >&2 "Not running"
  ;;
force-stop)
  sig TERM && exit 0
  echo >&2 "Not running"
  ;;
restart|reload)
  sig HUP && echo reloaded OK && exit 0
  echo >&2 "Couldn't reload, starting '$CMD' instead"
  run "$CMD"
  ;;

看来需要重新修改一下了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号