最近在用Rails做一个网站,本来选用了Nginx+Mongrel的部署方式,也试了Nginx+Thin,后来看到JavaEye上一篇文章
浅析Ruby on Rails部署方案,其中介绍了Swiftiply有很好的性能,因此,准备用Swiftiply来部署项目。
看了Swiftiply官网
http://swiftiply.swiftcore.org的安装步骤,直接用gem安装:
$ sudo gem install swiftiply
安装过程中先后自动装上了rack和EventMachine,最后编译Swiftiply时出错:
引用
Building native extensions. This could take a while...
ERROR: Error installing swiftiply:
ERROR: Failed to build gem native extension.
/usr/bin/ruby1.8 extconf.rb install swiftiply
checking for main() in -lpthread... yes
checking for sys/epoll.h... yes
checking for main() in -lssl... no
creating Makefile
make
g++ -I. -I. -I/usr/lib/ruby/1.8/i486-linux -I. -DHAVE_SYS_EPOLL_H -D_FILE_OFFSET_BITS=64 -DOS_UNIX -DBUILD_FOR_RUBY -DHAVE_EPOLL -DWITHOUT_SSL -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -c rubymain.cpp
g++ -I. -I. -I/usr/lib/ruby/1.8/i486-linux -I. -DHAVE_SYS_EPOLL_H -D_FILE_OFFSET_BITS=64 -DOS_UNIX -DBUILD_FOR_RUBY -DHAVE_EPOLL -DWITHOUT_SSL -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -c mapper.cpp
mapper.cpp: In constructor ‘Mapper_t::Mapper_t(const std::string&)’:
mapper.cpp:53: error: ‘strerror’ was not declared in this scope
mapper.cpp:57: error: ‘strerror’ was not declared in this scope
mapper.cpp:62: error: ‘strerror’ was not declared in this scope
make: *** [mapper.o] Error 1
Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/swiftiply-0.6.1.1 for inspection.
Results logged to /usr/lib/ruby/gems/1.8/gems/swiftiply-0.6.1.1/ext/fastfilereader/gem_make.out
我痕郁闷啊!!!排错吧。
首先,在google搜索一下:发现有一两个帖子也是这个问题,但是都没有答案。只好自己找了。
第一步我怀疑是我的开发环境没装好,我用的是Ubuntu Server 8.10,检查了一下,开发包都装上了,别的软件也都能编译,包括mongrel。
第二步怀疑是编译器的问题,gcc或g++,搜了一下,gcc4.3好像有类似问题,有补丁,我这是gcc4.4.3,没找到。
只好仔细看程序了,不偷懒了,看出错信息应该是缺少头文件的问题,在/usr/lib/ruby/gems/1.8/gems/swiftiply-0.6.1.1/ext/fastfilereader/下找到mapper.cpp文件,打开看了一下,头文件好像缺少。刚好,在搜文件的时候在/usr/lib/ruby/gems/1.8/gems/eventmachine-0.12.6/ext/fastfilereader/下也有这个文件,用diff比较一下:
$diff mapper.cpp ../../../eventmachine-0.12.6/ext/fastfilereader/mapper.cpp
引用
34a35
> #include "unistd.h"
35a37
> #include <cstring>
59a62,64
> #ifdef OS_WIN32
> MapPoint = (char*) mmap (0, FileSize, PROT_READ, MAP_SHARED, Fd, 0);
> #else
60a66
> #endif
84a91,93
> #ifdef OS_SOLARIS8
> munmap ((char*)MapPoint, FileSize);
> #else
85a95
> #endif
150a161,163
> #ifdef OS_WIN32
> MapPoint = (char*) MapViewOfFile (hMapping, FILE_MAP_WRITE, 0, 0, 0);
> #else
151a165
> #endif
输出表明,缺少了两个头文件声明:
引用
#include "unistd.h"
#include <cstring>
用vi修改mapper.cpp文件,加上这两行。
然后,运行swiftiply的安装程序:
$ sudo ruby setup.rb
引用
Building extension in /home/tian/swiftiply-0.6.1.1/ext/fastfilereader with {:mkmf=>true}.
checking for main() in -lpthread... yes
checking for sys/epoll.h... yes
checking for main() in -lssl... no
creating Makefile
g++ -I. -I. -I/usr/lib/ruby/1.8/i486-linux -I/home/tian/swiftiply-0.6.1.1/ext/fastfilereader -DHAVE_SYS_EPOLL_H -D_FILE_OFFSET_BITS=64 -DOS_UNIX -DBUILD_FOR_RUBY -DHAVE_EPOLL -DWITHOUT_SSL -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -c rubymain.cpp
g++ -I. -I. -I/usr/lib/ruby/1.8/i486-linux -I/home/tian/swiftiply-0.6.1.1/ext/fastfilereader -DHAVE_SYS_EPOLL_H -D_FILE_OFFSET_BITS=64 -DOS_UNIX -DBUILD_FOR_RUBY -DHAVE_EPOLL -DWITHOUT_SSL -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -c mapper.cpp
g++ -shared -o fastfilereaderext.so rubymain.o mapper.o -L. -L/usr/lib -L. -Wl,-Bsymbolic-functions -rdynamic -Wl,-export-dynamic -lruby1.8 -lpthread -lpthread -ldl -lcrypt -lm -lc; strip fastfilereaderext.so
Installing Swiftcore Swiftiply ...
mkdir -p /usr/bin
install -c -m 0755 bin/mongrel_rails /usr/bin/mongrel_rails
install -c -m 0755 bin/swiftiply /usr/bin/swiftiply
install -c -m 0755 bin/swiftiply_mongrel_rails /usr/bin/swiftiply_mongrel_rails
mkdir -p /usr/local/lib/site_ruby/1.8/i486-linux
install -c -m 0755 ext/fastfilereader/fastfilereaderext.so /usr/local/lib/site_ruby/1.8/i486-linux/fastfilereaderext.so
mkdir -p /usr/local/lib/site_ruby/1.8/swiftcore
install -c -m 0644 src/swiftcore/Swiftiply.rb /usr/local/lib/site_ruby/1.8/swiftcore/Swiftiply.rb
mkdir -p /usr/local/lib/site_ruby/1.8/swiftcore/Swiftiply
install -c -m 0644 src/swiftcore/Swiftiply/support_pagecache.rb /usr/local/lib/site_ruby/1.8/swiftcore/Swiftiply/support_pagecache.rb
install -c -m 0644 src/swiftcore/Swiftiply/swiftiply_client.rb /usr/local/lib/site_ruby/1.8/swiftcore/Swiftiply/swiftiply_client.rb
install -c -m 0644 src/swiftcore/evented_mongrel.rb /usr/local/lib/site_ruby/1.8/swiftcore/evented_mongrel.rb
install -c -m 0644 src/swiftcore/swiftiplied_mongrel.rb /usr/local/lib/site_ruby/1.8/swiftcore/swiftiplied_mongrel.rb
install -c -m 0644 src/swiftcore/types.rb /usr/local/lib/site_ruby/1.8/swiftcore/types.rb
shebang:open /usr/bin/mongrel_rails.tmp
rm -f /usr/bin/mongrel_rails.tmp
shebang:open /usr/bin/swiftiply.tmp
mv /usr/bin/swiftiply.tmp /usr/bin/swiftiply
rm -f /usr/bin/swiftiply.tmp
shebang:open /usr/bin/swiftiply_mongrel_rails.tmp
rm -f /usr/bin/swiftiply_mongrel_rails.tmp
Generating ri documentation from src/swiftcore/Swiftiply.rb,src/swiftcore/evented_mongrel.rb,src/swiftcore/Swiftiply/swiftiply_client.rb,src/swiftcore/Swiftiply/support_pagecache.rb,src/swiftcore/swiftiplied_mongrel.rb,src/swiftcore/types.rb
Swiftiply.rb: mmccc..............................c.......c...........
evented_mongrel.rb: mc....c....c.c.....c.
swiftiply_client.rb: c.......
support_pagecache.rb: mmcc.....
swiftiplied_mongrel.rb: mc....c....c.c....c.
types.rb: mcc...........c................c.........c........
Generating RI...
Files: 6
Classes: 23
Modules: 7
Methods: 133
Elapsed: 3.445s
OK!编译通过!
后面的Swiftiply配置和运行都比较顺利,应用跑起来之后,性能比Nginx+Mongrel确实有提高,尤其是大的并发出现时,性能比较稳定。
总结:在Linux下安装程序,出现编译问题是常有的事,要解决问题,终极的办法还是看源代码。
不过提到Swiftiply,好像用的人不多啊,像这样的编译问题,肯定会遇到,却搜不到解决方案,稍显遗憾。
运行环境:
引用
Ubuntu Server 8.10
ruby 1.8.7
rails 2.3.2
Swiftiply 0.6.1.1
分享到:
相关推荐
总结来说,解决Rails与MySQL连接问题涉及检查配置文件、安装和更新依赖、确保系统库完整、确认服务状态和网络连接以及处理版本兼容性。通过排查这些方面,大部分问题都能迎刃而解。在遇到问题时,查看错误日志、查阅...
这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...
rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...
- **Gemfile**:定义项目依赖的Gem(Ruby的包管理器),通过`bundle install`安装。 - **Database Migration**:数据库结构的变化会通过迁移文件来实现,运行`rake db:migrate`进行更新。 - ** erb**:ERB...
标题 "rails 的安装" 涉及到的是Ruby on Rails框架的安装过程,这是一个用于构建Web应用程序的开源框架。Rails是基于Ruby编程语言,它强调DRY(Don't Repeat Yourself)原则,提供了一种优雅的方式来组织和编写代码...
- 下载并安装NetBeans IDE,创建新项目时选择Ruby on Rails模板,可自动导入必要的Rails环境。 #### 总结 尽管Ruby on Rails提供了丰富的功能和高效的工作流,但初次安装配置可能会让新手感到困惑。通过上述步骤...
本文将详细介绍Ruby on Rails的安装流程,让读者能够顺畅地完成安装,为下一步的开发工作打下坚实的基础。 首先,我们必须明确安装Ruby on Rails需要准备哪些组件。基本的组件包括Ruby语言环境、Ruby的包管理工具...
由于在Windows上直接安装可能会遇到问题,可以尝试使用预编译的二进制版本,或者在命令行中运行`gem install mysql2 --platform=ruby -- --with-mysql-dir="C:\path\to\mysql\installation"`,其中"C:\path\to\mysql...
在Rails项目中安装Mongrel通常通过RubyGems进行,这是一个Ruby的包管理器。首先确保RubyGems已经安装,然后在命令行执行以下命令: ```bash gem install mongrel ``` 安装完成后,可以通过`mongrel_rails`命令来...
Node.js在某些Rails应用中是必需的,尤其是在使用某些前端工具如Webpacker时。可以通过以下命令进行安装: ```bash # 安装依赖库 yum install httpd httpd-devel openssl-devel zlib-devel mysql-server mysql-...
同时,提供的`安装说明.xls`文件应该包含更详细的步骤和可能遇到的问题解决方案,确保您在整个过程中得到充分的指导。 最后,记住在开发过程中保持版本的一致性是非常重要的,因为不同版本的软件之间可能存在兼容性...
### Ruby on Rails 安装指南及注意事项 ...同时,文中还列举了一些常见的安装问题及其解决方法,帮助用户顺利安装并使用Rails进行Web开发。希望本文能够对正在学习或使用Rails的开发者们有所帮助。
标题中的“Rails的中文乱码问题”涉及到的是在使用Ruby on Rails框架开发Web应用时,遇到的中文字符编码不正确的问题。Rails是一个基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式。在...
### Redmine 搭建 Ruby_Ruby_on_Rails 项目管理系统的知识点 #### 一、基础知识与背景介绍 **Redmine** 是一个基于 Web 的项目管理和跟踪工具,它使用 Ruby on Rails(简称 ROR)框架构建而成。Redmine 的设计初衷...
然而,为了提高效率和避免安装时网络问题导致的延迟,你可以在安装前使用`gem install rails --pre`来预先下载Rails的最新预发布版本,或者指定一个特定的版本号,如`gem install rails -v 6.1.4`。 描述中提到的...
如果在执行这个命令时出现错误,应检查数据库连接是否正确,以及所有必要的Gem是否已安装并可用。 6. **启动Rails服务器**:使用`rails server`或简写`rails s`命令启动本地开发服务器。默认情况下,服务器会在...
而"cookbook.rar"可能是一个Rails的实践手册,里面包含了各种常见问题的解决方案和最佳实践,帮助开发者解决在实际开发中遇到的问题。 在学习Rails的过程中,开发者会接触到许多关键概念和技术,如ActiveRecord...
将这些文件放在系统的PATH环境变量下,或者Rails项目的`bin`目录下,可以解决某些库依赖问题。 7. **开发环境配置**:在NetBeans中,你需要配置Ruby和Rails的路径,以及数据库连接信息。在IDE的首选项设置中,你...
7. **部署流程**:最后,创建一个Shell脚本来自动化上述步骤,包括安装依赖、初始化数据库、预编译静态资产等。这个名为`rails-environment-master`的压缩包可能包含的就是这样一个脚本,可以解压后运行来快速部署...