新手问题 LoadError: cannot load such file — phusion_passenger/rack_handler

autumnwolf · 2016年08月05日 · 最后由 tony612 回复于 2016年08月05日 · 2446 次阅读

我在 staging server 上rake db:create 结果:

rake aborted!
LoadError: cannot load such file -- phusion_passenger/rack_handler
/usr/local/rvm/gems/ruby-2.3.1/gems/bundler-1.12.5/lib/bundler/runtime.rb:86:in `require'
/usr/local/rvm/gems/ruby-2.3.1/gems/bundler-1.12.5/lib/bundler/runtime.rb:86:in `block (2 levels) in require'
/usr/local/rvm/gems/ruby-2.3.1/gems/bundler-1.12.5/lib/bundler/runtime.rb:81:in `each'
/usr/local/rvm/gems/ruby-2.3.1/gems/bundler-1.12.5/lib/bundler/runtime.rb:81:in `block in require'
/usr/local/rvm/gems/ruby-2.3.1/gems/bundler-1.12.5/lib/bundler/runtime.rb:70:in `each'
/usr/local/rvm/gems/ruby-2.3.1/gems/bundler-1.12.5/lib/bundler/runtime.rb:70:in `require'

这是我的 Gemfile:

group :development, :test do
  # https://github.com/deivid-rodriguez/byebug
  gem 'byebug'
  gem "capistrano", "~> 3.4"
  gem "passenger", ">= 5.0.25", require: "phusion_passenger/rack_handler"
end

我只是在本地开发用 passenger 做 server 来着。虽然我服务器端也用的 passenger,但是应该和这个无关吧。 求大牛指点!

EDIT:1. staging server 是 staging 环境 2. 运行rake db:create之前运行` bundle install --deployment --without development test`

解决办法:默认不加 Rails_env 就是对 develop 和 test 生成数据库,加上 staging 就可以了。

你 staging 上是什么环境?你 Gemfile 里写的是 group :development, :test do,如果不是这两个环境下的话,很可能没有装那个 gem

#1 楼 @tony612 我 staging 上就是 staging 环境 不是 development 和 test,这个 gem 在 develop,test 环境才需要,目前 stging 不需要这个 gem 吧?

#2 楼 @autumnwolf 要啊,你这个不是 web server 吗?不过有点奇怪的是,你这里只是 rake db:create ,居然会用到 passenger

#3 楼 @tony612 我 passenger 是 local 开发用的 server(因为 rails s 太慢了). 我都放在 develop test group 里面了,为什么 staging server 还需要这个 gem?

#4 楼 @autumnwolf 我还以为你是 staging 上要用 passenger 做 web server 呢。。原来不是啊。。那就不知道你代码里哪里用到 passenger 了。。

#5 楼 @tony612 Staging 上是 passenger 做 server,但是和代码这里没有关系吧,这块这个 passener 是 stand-alone.

#6 楼 @autumnwolf staging 用 passenger 做 web server,那你就要把这个 gem 放到 staging 的 group 下或者最外边吧。不清楚你说的 stand-alone 是什么意思。然后你给的 log 比较少,所以比较难看出到底哪里用到了 passenger

gem "passenger", ">= 5.0.25", require: "phusion_passenger/rack_handler"

改成这样试试

gem "passenger", ">= 5.0.25"

#6 楼 @autumnwolf 你是不是忘了加上环境变量 RAILS_ENV=staging rake db:migrate

#9 楼 @martin91 嗯 是 刚才发现了 不加环境变量就是用的 develop 和 test 谢谢

#6 楼 @autumnwolf 是因为你 bundle 的时候已经指定 bundle install --deployment --without development test 所以你的 bundler 不会安装 passenger 这些在 development 以及 test 组下边的 gem,但是你执行 migration 的时候没有环境变量的话,rake 默认用 development 模式启动应用,这个时候 bundler 根据 Gemfile 里的声明,尝试加载 development 组里的 gem,但是发现根本找不到,所以出错。

#8 楼 @nong 我感觉你的办法应该可以 其实原来不知道环境变量也要加上 所以莫名其妙为什么会调用 deveop,test 里的 gem。同样感谢

#7 楼 @tony612 他的问题跟 passenger 其实没关系啦。不过想补充的是,他说的 passenger stand-alone 是 passenger 支持的两种运行方式中的一种,常见的一种是编译为 Apache 或者 Nginx 的模块,随着 Web Server 一起启动运行。另一种 Stand-Alone 就是作为独立进程运行,但是需要独立维护跟管理。

#7 楼 @tony612 #14 楼 @martin91 对的,然后 passenger 服务器做 web server 不需要任何 gem。

#13 楼 @autumnwolf 如果喜欢偷懒的话,建议可以在 ~/.bashrc 里边加入下面这一行:

export RAILS_ENV=staging

这样以后每次登录就能自动设置系统环境变量了,也就不需要每次敲命令前都需要在前面输入 RAILS_ENV了。

#16 楼 @martin91 嗯 这个不太适用 我吧 staging 和 production 想放在一个 server 上目前。谢谢!

#9 楼 @martin91 好吧。。我默认以为他已经加了 ENV 了。。

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