`
tianjianyong
  • 浏览: 883 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Rails项目安装Swiftiply时出现编译错误问题的解决办法

阅读更多
    最近在用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
2
0
分享到:
评论

相关推荐

    rails和mysql数据库连接中出现的问题以及解决办法

    总结来说,解决Rails与MySQL连接问题涉及检查配置文件、安装和更新依赖、确保系统库完整、确认服务状态和网络连接以及处理版本兼容性。通过排查这些方面,大部分问题都能迎刃而解。在遇到问题时,查看错误日志、查阅...

    Rails项目源代码

    这个“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 2.3.2离线安装rails 2.3.2离线安装rails ...

    rails 项目起步示例

    - **Gemfile**:定义项目依赖的Gem(Ruby的包管理器),通过`bundle install`安装。 - **Database Migration**:数据库结构的变化会通过迁移文件来实现,运行`rake db:migrate`进行更新。 - ** erb**:ERB...

    rails 的安装

    标题 "rails 的安装" 涉及到的是Ruby on Rails框架的安装过程,这是一个用于构建Web应用程序的开源框架。Rails是基于Ruby编程语言,它强调DRY(Don't Repeat Yourself)原则,提供了一种优雅的方式来组织和编写代码...

    教学级Ruby On Rails 手动安装.pdf

    - 下载并安装NetBeans IDE,创建新项目时选择Ruby on Rails模板,可自动导入必要的Rails环境。 #### 总结 尽管Ruby on Rails提供了丰富的功能和高效的工作流,但初次安装配置可能会让新手感到困惑。通过上述步骤...

    Ruby on Rails安装指南(Ruby 1.8.6+Rails 2.0.2)

    Ruby on Rails 安装指南 Ruby on Rails 安装指南是指安装 Ruby 1.8.6 和 Rails 2.0.2 的详细步骤。首先,需要下载 Ruby One-Click Installer 版本,并安装 Ruby。然后,下载 Rails 2.0.2 版本,并安装。接下来,...

    rails3.1安装与mysql配置 windows

    由于在Windows上直接安装可能会遇到问题,可以尝试使用预编译的二进制版本,或者在命令行中运行`gem install mysql2 --platform=ruby -- --with-mysql-dir="C:\path\to\mysql\installation"`,其中"C:\path\to\mysql...

    Rails 中mongrel的安装

    在Rails项目中安装Mongrel通常通过RubyGems进行,这是一个Ruby的包管理器。首先确保RubyGems已经安装,然后在命令行执行以下命令: ```bash gem install mongrel ``` 安装完成后,可以通过`mongrel_rails`命令来...

    centOS Rails3环境搭建

    Node.js在某些Rails应用中是必需的,尤其是在使用某些前端工具如Webpacker时。可以通过以下命令进行安装: ```bash # 安装依赖库 yum install httpd httpd-devel openssl-devel zlib-devel mysql-server mysql-...

    ruby1.8.6 + rails2.0.2 安装配置 详细说明

    同时,提供的`安装说明.xls`文件应该包含更详细的步骤和可能遇到的问题解决方案,确保您在整个过程中得到充分的指导。 最后,记住在开发过程中保持版本的一致性是非常重要的,因为不同版本的软件之间可能存在兼容性...

    RailsInstall安装

    ### Ruby on Rails 安装指南及注意事项 ...同时,文中还列举了一些常见的安装问题及其解决方法,帮助用户顺利安装并使用Rails进行Web开发。希望本文能够对正在学习或使用Rails的开发者们有所帮助。

    Rails的中文乱码问题

    标题中的“Rails的中文乱码问题”涉及到的是在使用Ruby on Rails框架开发Web应用时,遇到的中文字符编码不正确的问题。Rails是一个基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式。在...

    Redmine 搭建 Ruby_Ruby_on_Rails 项目管理系统

    ### Redmine 搭建 Ruby_Ruby_on_Rails 项目管理系统的知识点 #### 一、基础知识与背景介绍 **Redmine** 是一个基于 Web 的项目管理和跟踪工具,它使用 Ruby on Rails(简称 ROR)框架构建而成。Redmine 的设计初衷...

    rails安装

    然而,为了提高效率和避免安装时网络问题导致的延迟,你可以在安装前使用`gem install rails --pre`来预先下载Rails的最新预发布版本,或者指定一个特定的版本号,如`gem install rails -v 6.1.4`。 描述中提到的...

    配置rails环境

    如果在执行这个命令时出现错误,应检查数据库连接是否正确,以及所有必要的Gem是否已安装并可用。 6. **启动Rails服务器**:使用`rails server`或简写`rails s`命令启动本地开发服务器。默认情况下,服务器会在...

    rails的经典学习项目

    而"cookbook.rar"可能是一个Rails的实践手册,里面包含了各种常见问题的解决方案和最佳实践,帮助开发者解决在实际开发中遇到的问题。 在学习Rails的过程中,开发者会接触到许多关键概念和技术,如ActiveRecord...

    windows下配置netbeans开发rails

    将这些文件放在系统的PATH环境变量下,或者Rails项目的`bin`目录下,可以解决某些库依赖问题。 7. **开发环境配置**:在NetBeans中,你需要配置Ruby和Rails的路径,以及数据库连接信息。在IDE的首选项设置中,你...

    linux-在Ubuntu服务器上安装Rails生产环境的脚本

    7. **部署流程**:最后,创建一个Shell脚本来自动化上述步骤,包括安装依赖、初始化数据库、预编译静态资产等。这个名为`rails-environment-master`的压缩包可能包含的就是这样一个脚本,可以解压后运行来快速部署...

Global site tag (gtag.js) - Google Analytics