4

使用以下指南

http://spontaneousderivation.com/2012/09/30/rails-3-2-on-a-shared-dreamhost-server/

我设法让我的 Rails 3.2.8 应用程序和 Ruby 1.9.3 使用 fcgi 在 Dreamhost 共享主机上运行(我知道这不是最好的解决方案,但我不想将我的应用程序降级到 3.0,而且我缺乏技能和 VPS 的钱)。

遵循 DH wiki 上的指南:

http://wiki.dreamhost.com/RMagick

http://wiki.dreamhost.com/Image_Magick#Compiling_ImageMagick_on_your_DreamHost_account

我将自己的 ImageMagic 和 RMagic 版本安装为本地 gem。

但是,当我尝试使用 RMagic 功能运行应用程序时,我在 error.log 中收到以下错误:

'脚本头过早结束:dispatch.fcgi'。

当我在上传器中取消注释以下行时,我发现它正在发生:

include CarrierWave::RMagick

从 shell运行dispatch.fcgi不会报告任何错误。

我认为问题可能是由LD_LIBRARY_PATH其他 env 变量(列在 DH wiki 中)引起的,但尝试将它们包含在我的中.bashrc,但没有效果。.bash_profiledispatch.fcgi

4

2 回答 2

2

此解决方案自 2013 年 3 月 7 日起有效。我只是用它来部署一个新的应用程序到 DH。

在您的宝石文件中...

gem 'paperclip'

然后从您的应用程序目录运行“捆绑安装”。

在您的 public/dispatch.fcgi...复制下面的代码并将 APPNAME 替换为 config/application.rb 模块中列出的名称,将 USER 替换为您的 DH 用户名,并将 RUBY 替换为“which ruby”在您的 DH ssh 会话的命令行上。

#!/home/USER/.rvm/rubies/RUBY/bin/ruby

ENV['RAILS_ENV'] ||= 'production'
ENV['HOME'] ||= `echo ~`.strip
ENV['GEM_HOME'] = File.expand_path('~/.rvm/gems/RUBY')
ENV['GEM_PATH'] = File.expand_path('~/.rvm/gems/RUBY') + ":" +
File.expand_path('~/.rvm/gems/RUBY@global')

require 'fcgi' 
require File.join(File.dirname(__FILE__), '../config/environment.rb')

class Rack::PathInfoRewriter
def initialize(app)
@app = app
end

def call(env)
env.delete('SCRIPT_NAME')
parts = env['REQUEST_URI'].split('?')
env['PATH_INFO'] = parts[0]
env['QUERY_STRING'] = parts[1].to_s
@app.call(env)
end
end

Rack::Handler::FastCGI.run  Rack::PathInfoRewriter.new(APPNAME::Application)

假设您安装了有效的 RVM,则无需特殊处理即可使回形针正常工作。除了我上面提到的细节(特别是 dispatch.fcgi 略有改变),你可以按照这个指南,http://spontaneousderivation.com/2012/09/30/rails-3-2-on-a-shared-梦想主机服务器/ .

于 2013-03-08T06:55:13.823 回答
1

RMagick 和 ImageMagick 因存在编译/运行时问题而臭名昭著。我建议放弃 RMagick 以支持 MiniMagick 之类的东西。看起来 CarrierWave 有一个您可以使用的 MiniMagick 处理器:https ://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/processing/mini_magick.rb

MiniMagick 只是直接输出到 ImageMagick 进程,这样您就可以避免链接到已编译二进制文件的问题。过去,RMagick 也被认为是内存泄漏等的来源。

此外,您应该认真考虑 Heroku 进行部署。一个测功机是免费的,我敢打赌你的体验会好很多。

于 2012-11-15T14:43:54.380 回答