部署 windows 下部署 rails 项目问题

carl · 2012年02月08日 · 最后由 carl 回复于 2012年02月08日 · 8017 次阅读

出于特殊原因,需要在 windows 下部署 rails 项目,但是有的 gem 文件总是装不上,比如这个:typhoeus,想问下大家有什么解决方法吗,在 ubuntu 下可以装上这个的,有那种可以吧 gem 文件打包迁移到不同系统中使用的工具吗?

谢谢大家!

看到大家有的推荐用 cygwin,大家认为怎么样?

我以前很变态的在 windows 里装了个虚拟机来部署项目。。。 cygwin 我记得只是把 ls 命令转换成 dir 命令这样的东西,本质上不是 linux。

@ywencn typhoeus 这个 gem 用到了 curl 这个库。你要想在 windows 下编译 typhoeus,得先编译 curl

@skandhas 要先编译先编译 curl?那你之前在 windows 下成功的用过 typhoeus 吗?我配置了好久好还是不好使呢?

lz 你就蛋疼吧。可怜的人。

我第一反应也是 1 楼的方案。

其实我还见过一个 windows server 上面虚拟机里面又一个 windows server。

#3 楼 @carl curl 是 linux 里的命令,你需要将 curl 移植到 windows 上。。。。。反正,以后蛋疼的事多了去了。。。。。你不行再 windows 上装 vbox 吧

@carl 如果有条件,尽量不要在 windows 下部署 Rails。如果是有什么特殊原因不得不在 windows 下部署的话,我这里有些编译 native gem 的经验,希望能对你有帮助:

  1. 用 RubyInstaller 来装 Ruby 环境。
  2. 配置好 Devkit,这一步很重要,编译 native gem 就靠它了。 3.对于单纯的 native gem,比如说是某些 gem 为了性能,不用 ruby 写,而用 c 写,只用到了 ruby 的 C 接口,这样的 gem 不需要担心,devkit 会很顺利的编译通过。
  3. 对于使用了其他开源库的 gem,该开源库也有对应的 windows 版(换句话说是 windows 下该库能编译并使用)。那么这个 gem 也能编译,但是需要配置一下 CPATH 和 LIBRARY_PATH。 比如说编译 RMagick 这个 gem,它依赖于 ImageMagick,而 ImageMagick 是有 windows 版的,也有 SDK。这样的话,在 gem install 之前,先在命令行下设置 CPATH 和 LIBRARY_PATH: set CPATH=d:\ImageMagick-6.5.6-Q8\include set LIBRARY_PATH=d:\ImageMagick-6.5.6-Q8\lib 然后再 gem install rmagick 就能编译通过。
  4. 对于依赖于系统特性的 gem,比如使用 linux 的 epoll,使用了 MacOS 的 fsevent,那个这个 gem 在 windows 下是不能编译通过的。

对于你说的那个 typhoeus,它应该(或是希望)是属于第 4 种情况,这样的话,你可以先下载 curl 的代码编译,然后设置好 include 目录和 lib 目录,这样在 gem install 应能编译过。我现在用的是 Mac,没法帮你试,你自己动手试试吧。希望你别遇到第 5 种情况。

以前我们公司内部的一个 rails 项目也是部署在 windows 下,也遇到类似的情况,所以就调查了下,积累了一些这样的经验。总的来说,windows 下编 native gem,就怕第 5 种。

#7 楼 @skandhas 勇哥也在啊。

可以尝试装个 vmware server 2.0(免费的),里面装个 linux,再将端口映射出来。 vmware server 设为开机自启动,自动开启 linux, 还可以通过 web 端进行远程管理,比一般的 vps 好用。 迁移和备份都方便,我喜欢。

vmware server

@carl 刚才找了一个 windows xp 机器,成功编译完了 typhoeus,并运行。一会儿我把步骤发上来,倒是也不繁琐。或者我把编译好的 gem 给发你也行。

@skandhas 太感谢了,谢谢各位,你能把步骤贴上来吗,急用!谢谢!没办法啊,要求在 windows 下部署...

@skandhas 吧 gem 发给我,可以直接用?

#12 楼 @carl 我写了一篇:http://ruby-china.org/topics/1084 希望对你有帮助。

@skandhas 嗯,谢谢:)问一下,你要是直接把 gem 给我的话,直接好使?

#13 楼 @carl 如果是 ruby 版本差太多,假设我 1.9,你 1.8。那我发给你的编译好的 gem 是不能用的。还是看看步骤,直接编译更放心:>

skandhas 嗯,谢谢!

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