ubuntu+rails+passenger+apache+nginx常见问题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

很多问题的标题就是报错之后日志中记录的错误信息。

apache的日志在/var/log/apache2/目录中,error.log。当然,也有可能在其他位置。如果是下载httpd,编译安装的话,有可能在/usr/local/apache目录中。

nginx的日志在/opt/nginx/log/中,也是error.log。也是有可能在其他位置的,例如安装目录或者是/var/log/nginx/中。

 

 

1.rails 3.1.0 ActionView::Template::Errror (application.css isn't precompiled)

解答:

这个错误是在生产环境中发生的,生产环境要求assets预先编译,或者是设置运行时编译。

设置生产环境的配置信息。

 
  1. # config/environments/production.rb 
  2. ... 
  3. config.assets.compile = true 
  4. ... 

或者是执行

 

 
  1. bundle exec rake assets:precompile 

然后重启rails server,或者是重启apache和nginx。

参考链接

http://stackoverflow.com/questions/7275636/rails-3-1-0-actionviewtemplateerrror-application-css-isnt-precompiled

http://ruby-china.org/topics/1415

 

 

2.安装passenger

gem install passenger

passenger-install-apache2-module

passenger-install-nginx-module

安装的过程中会有提示,提示你没有安装的组件,等你都安装好之后,passenger在apache和nginx的模块就可以顺利安装了。安装之后,还会提示你如何设置apache和nginx。

 

3.Rails application unable to connect to mysql, Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Mysql2::Error)

 

/tmp/mysql.sock是你在config/database.yml文件中的

 

 
  1. production: 
  2.   adapter: mysql2 
  3.   encoding: utf8 
  4.   host: localhost 
  5.   database: blog 
  6.   pool: 5 
  7.   username: root 
  8.   password: 123.com 
  9.   socket: /tmp/mysql.sock 
  10.   timeout: 5000 

就是说这个/tmp/mysql.sock文件不存在,其实就是位置不对。

在安装了mysql之后,通过下面的方法找到这个文件。

mysqladmin -u root -p variables | grep socket

在输入密码之后,会出现面的内容

 

 
  1. root@web:/home/github/blog# mysqladmin -u root -p variables |grep sock 
  2. Enter password:  
  3. | socket                                            | /var/run/mysqld/mysqld.sock                                                                                            | 
  4. root@web:/home/github/blog#  

上面的红色内容填写到database.yml文件中就可以了,或者建立一个符号链接。

 
  1. ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock 

也可以解决这个问题。

参考链接

http://stackoverflow.com/questions/5499035/ruby-on-rails-3-cant-connect-to-local-mysql-server-through-socket-tmp-mysql-s

http://stackoverflow.com/questions/11350929/rails-application-unable-to-connect-to-mysql-cant-connect-to-local-mysql-serve

 

4.部署到生产环境的apache中,如何在apache的配置文件中设置RAILS_ENV

 

在rails server命令中可以添加参数,指定服务启动使用什么配置,生产环境还是开发环境。

rails server --environment=production

在进行数据migration的时候,也可以指定使用database.yml中的哪种环境,生产环境还是开发环境。

rake db:create RAILS_ENV=production

 

 

 
  1. <VirtualHost *:80> 
  2.   ServerName www.yourdomain.com 
  3.   DocumentRoot /var/www/yourfolder/public 
  4.   <Directory /var/www/yourfolder/public> 
  5.     AllowOverride all 
  6.     Options -MultiViews 
  7.     RailsEnv development 
  8.   </Directory> 
  9.  
  10.   ErrorLog /var/log/apache2/yourdomain.error.log 
  11.   LogLevel warn 
  12.   CustomLog /var/log/apache2/yourdomain.access.log combined 
  13. </VirtualHost> 

请注意上面红色的文字。

 

参考链接

http://www.hoenick.com/blog/2012/01/02/ruby-on-rails-rails_env-im-apache-definiere/

5.部署到生产环境的nginx,如何在nginx的配置文件中设置RAILS_ENV

server {
      listen 80;
      server_name www.yourhost.com;
      root /somewhere/public;   # <--- be sure to point to 'public'!
      passenger_enabled on;
      rails_env development; nginx的passenger模块默认是生产模式,如果是在本机进行开发
   }

注意红色的文字。

 

参考链接

http://www.myexception.cn/ai/453283.html

http://blog.sina.com.cn/s/blog_4051f5dc0100kxk5.html

 

6.nginx的常用命令

启动nginx

 

 
  1. /usr/local/webserver/nginx/sbin/ngint –t 测试配置文件是否正确 
  2. /usr/local/webserver/nginx/sbin/ngint 启动 

重新加载配置文件

 

 
  1. /usr/local/webserver/nginx/sbin/ngint –s reload 

停止nginx

 
  1. /usr/local/webserver/nginx/sbin/ngint –s stop 

参考文献

http://hi.baidu.com/bikong0411/item/fd5065c211776555ac00ef5d

 

7.passenger+nginx,启动nginx老是报错,找不到passenger_root

我是先安装的nginx1.3.7,然后安装passenger,启动的时候就出现了这个错误。

但是我安装passenger-install-nginx-module的时候,选择让passenger下载nginx1.2,然后自动编译安装,启动的时候就没有问题了。

我猜想可能是最新版本的nginx和passenger有一些兼容问题吧。

 

参考链接

http://ruby-china.org/topics/701

Installing Passenger when Nginx is already installed; Possible?

 

8.mysql2

 

rails3使用的mysql适配器是mysql2。可能需要单独安装。

 

 
  1. gem install activerecord-mysql2-adapter 
  2.  
  3. bundle install 

 

参考链接

Rails Error: "Could not find gem 'activerecord-mysql2-adapter (>= 0) ruby' in the gems available on this machine

Problem with mysql2 and rails3 (bundler)

error:- mysql2 adapter: `gem install activerecord-mysql2-adapter`

 

9.发布到生产环境发现修改app/views/layouts/application.html.erb之后,刷新页面,但是没有变化。

使用passenger,发布到生产环境,使用了生产环境配置文件config/environments/production.rb,文件中有一句。

 

 
  1. # Code is not reloaded between requests
     
  2. config.cache_class = true

就是缓存了代码,在多次请求也不会重新加载代码,所有没有看见更新之后的效果。当然了,发布到生产环境的代码都是经过严格测试,稳定的代码,不会是修改来修改去的东西,修改也不会要求马上见效,需要严格测试才行。

如果有这个需要的话,可以将设置改为false。如果不想该,也可以在tmp下建立一个restart.txt文件。

 

 
  1. touch tmp/restart.txt 

需要重新加载的时候,就修改一下文件的访问时间。

 

 
  1. echo "hello" >> restart 

也可以实现重新加载,而且还不破坏生产环境的配置文件。

 

 

参考链接

Rails Cache Clearing

 

10.rails ActionView::Template::Error (undefined method `post_comments_path'

功能是在一个博客的浏览页面添加评论。

在app/views/posts/show.html.erb中添加了add comment部分的form,但是没有在config/route.rb中添加

 

 
  1. resources posts do 
  2.  
  3.   resources comments 
  4.  
  5. end 

 

11.NoMethodError: undefined method `has_attached_file'

 

You will also need to add the following to your Gemfile

gem "paperclip", :git => "http://github.com/thoughtbot/paperclip.git"


本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/1037159,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
Ubuntu Java 应用服务中间件
如何通过 Apt-Get 在 Ubuntu 14.04 上安装 Apache Tomcat 7
如何通过 Apt-Get 在 Ubuntu 14.04 上安装 Apache Tomcat 7
95 0
|
3月前
|
消息中间件 Ubuntu Java
在Ubuntu 18.04上安装Apache Kafka的方法
在Ubuntu 18.04上安装Apache Kafka的方法
189 0
|
1月前
|
缓存 前端开发 应用服务中间件
CORS跨域+Nginx配置、Apache配置
CORS跨域+Nginx配置、Apache配置
145 7
|
21天前
|
消息中间件 Ubuntu Java
Ubuntu系统上安装Apache Kafka
Ubuntu系统上安装Apache Kafka
|
1月前
|
Ubuntu Unix 应用服务中间件
Ubuntu16.04.1 安装Nginx
Ubuntu16.04.1 安装Nginx
|
1月前
|
Ubuntu 网络安全 Apache
Ubuntu下安装Apache2.4.7遇到的问题及解决办法
Ubuntu下安装Apache2.4.7遇到的问题及解决办法
|
1月前
|
缓存 负载均衡 应用服务中间件
解决Nginx常见问题的技术指南
解决Nginx常见问题的技术指南
141 0
|
3月前
|
Ubuntu 应用服务中间件 Linux
在Linux中,如何配置Web服务器(如Apache或Nginx)?
在Linux中,如何配置Web服务器(如Apache或Nginx)?
|
3月前
|
缓存 Ubuntu 前端开发
在Ubuntu上手动与自动启动Nginx的踩坑经历、以及重启服务
本文分享了作者在Ubuntu系统上手动和自动启动Nginx服务的踩坑经历,包括创建启动脚本、解决依赖问题、配置服务自动启动以及通过命令行管理Nginx服务的方法。
398 0
在Ubuntu上手动与自动启动Nginx的踩坑经历、以及重启服务
|
3月前
|
Ubuntu Python
ubuntu常见问题
ubuntu常见问题
31 0