新手问题 Gemfile syntax error compile error on line 19: syntax error, unexpected ':', expecting $end gem 'therubyracer', platforms: :ruby ^ (Bundler::GemfileError)

xautjzd · 2014年04月20日 · 最后由 xautjzd 回复于 2014年04月20日 · 5620 次阅读

部署完成后,访问主页,出现如题的错误:Gemfile syntax error compile error on line 19: syntax error, unexpected ':', expecting $end gem 'therubyracer', platforms: :ruby ^ (Bundler::GemfileError).但是 Gemfile 中:

gem 'therubyracer', platforms: :ruby 是自动生成,只是去掉注释而已,这是什么原因?

一般不需要用 therubyracer,除非你用 less,默认不需要就是为啥注释掉的原因,你可以装一个node.js 作为 javascript 运行时环境

#1 楼 @ericguo 但是需要用它来作为 java 运行时环境吧

访问了你的主页,你的 ruby 版本太低,升到 ruby 2.0.0 p 451 应该就可以解决问题,另外 passenger 的版本也太低,现在早已是 4.0.41 版本啦!

#3 楼 @ericguo 我的 ruby 版本一直都是 2.0.0 p 451 的

#4 楼 @xautjzd 可是明明是 1.8 的目录。。

5   /usr/lib/ruby/gems/1.8/gems/passenger-3.0.12/lib/phusion_passenger/utils.rb     326     in `prepare_app_process'

这是同一台机器么。。。啥操作系统?Ubuntu 照理不会发生这样的情况啊。。

nginx.conf 里面的 ruby 路径设置不对,按照你的安装目录应该有这一行:

passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p451/ruby; # 不确定对不对,查下是否有这个文件

#7 楼 @ericguo CentOS。我安装 passenger 的方式是yum install nginx-passenger,参考的是http://www.modrails.com/documentation/Users%20guide%20Nginx.html#deploying_a_rack_app,感觉很奇怪,ruby -v也是 2.0. 0 的

#9 楼 @xautjzd 先删掉 ngingx-passenger,然后通过gem install passenger && passenger-install-nginx-module 安装 passenger,然后再做文档的步骤。

#8 楼 @Rei 谢谢。我确实没有在配置里面配置 passenger_ruby,不过配置后出现了:nginx: [emerg] "passenger_ruby" directive is not allowed here in /etc/nginx/nginx.conf。我再查查什么原因

#10 楼 @ericguo 好的,我试试。非常感谢

用户终端的环境变量和应用执行得到的环境变量不一定一样的

#10 楼 @ericguo 现在用 deb 装比较好,不然升级的时候还得自己编译。

#14 楼 @Rei @ericguo 按照 @ericguo 建议的方式来,在安装完 passenger 后,再执行passenger-install-nginx-module,便出现如下问题: 当时买阿里云时,推荐的是 CentOS,所以选了它。

#13 楼 @lonre 请问如何改变应用执行的环境变量?网上找了资料,但是没找到。或者有没有推荐的参考资料?

#15 楼 @xautjzd sudo su -成为 root 先。。。

#16 楼 @xautjzd passenger?不是一找一大把么?。。

In Phusion Passenger 4, using SetEnv and PassEnv in Apache and env in Nginx works as expected. Detailed information can be found in the Phusion Passenger manual, section “About environment variables”.

http://blog.phusion.nl/2008/12/16/passing-environment-variables-to-ruby-from-phusion-passenger/

#15 楼 @xautjzd 其实目前 rails 最佳部署环境是 Ubuntu 12.04 LTS。。。

#16 楼 @xautjzd Passenger 我没有用过,不过我提两个思路:

  1. #18 楼 你说的,有可能 Passenger 和 Nginx 没有安装好
  2. Nginx 一般是需要 root 用户启动的,所以你切换到 root 用户,再看看 Ruby 版本情况

#20 楼 @lonre 我 ruby 就是在 root 下安装的,所以没有问题,passenger 的安装也是照着官网资料来安装的,安装过程比较顺利,没有任何错误发生。但是部署完成后,提示的版本不同

#19 楼 @ericguo 记着了,下次一定换成 Ubuntu12.04。Ruby 的安装是在 root 下进行的。但是最后部署后,提示的错误表明:应用执行环境的 Ruby 版本与系统安装的版本不符

#21 楼 @xautjzd 你 root 用户下执行 ruby -v 也是 2.0 的版本么?

#24 楼 @xautjzd 看起来你快爬出坑了,现在就缺解决权限问题了,无论如何,欢迎来到 Ruby 的世界。。

#19 楼 @ericguo @Rei @lonre 突然发现/etc/nginx/conf.d/下有个 passenger.conf 文件,打开一看,里面配置了 passenger_root 和 passenger_ruby,但却是 ruby1.8 的,估计罪魁祸首在这。难道这是 CentOS 与 Ubuntu 不同的地方?而且貌似 passenger_ruby 只能在这个里面配置,在/etc/nginx/nginx.conf 文件或者/etc/nginx/conf.d/xxx.conf 文件里配置便会出现:

[emerg] "passenger_ruby" directive is not allowed here in /etc/nginx/nginx.conf

类似的错误。通过yum install nginx-passenger安装的貌似是 passenger3 版本,而通过 gem 安装则是 passenger4

#26 楼 @xautjzd 如果编译安装 passenger,配置文件默认在/opt/nginx/conf/,你看到的配置文件都是之前的。。

#27 楼 @ericguo 额,刚才编译安装时确实看到过默认的安装路径为/opt/nginx,但是刚才去看了下,发现/opt/nginx/下什么都没有

#28 楼 @xautjzd 没事不要改默认配置,除非你确信你在干嘛。。还有你要先删除 CentOS 的 passenger 再装。

#26 楼 @xautjzd 这就是很多人喜欢自己编译安装的原因,自己可以清晰的了解各个方面。

不同发行版的打包方式不一样,配置方式不一样,默认设置不一样带来不少麻烦。

当然如果熟悉一种发行版,比如 Ubuntu Server,直接通过它的包管理工具安装,那是非常方便的。

#26 楼 @xautjzd 如果你用 centos 源安装,那么就是 centos 的人员维护的版本,会落后 passenger 最新版本很多。

passenger 有提供他们的 yum 源 http://www.modrails.com/documentation/Users%20guide%20Nginx.html#_installing_or_upgrading_on_red_hat_fedora_centos_or_scientificlinux

每个发行版的目录结构都有差异的,用你最熟悉或者最容易找到人帮忙那个。

Passenger 3 只支持在全局域设置 passenger_ruby,所以会出现 nginx: [emerg] "passenger_ruby" directive is not allowed here in

楼主真的要严格按照文档上显示的版本来做的,版本号不是为了好看的。

#32 楼 @Rei 谢谢。

Passenger 3 只支持在全局域设置 passenger_ruby

终于知道原因。第一次部署,找不到熟人帮忙,只能自己慢慢摸索,网上找资料各种尝试了。过程中确实碰到各种问题,有的还不理解,有时候有种无从下手的感觉,连搜都不知道怎么搜,搜索只能针对太具体的问题比较有效。所以 Ruby-China 上有人稍微给点提示都是莫大的帮助,从昨晚到现在已经有了很大进展。真的是太感谢你们了!

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