rails 3.2.8 ruby​​ 1.9.3 on DreamHost共享主机fcgi RMagic问题

时间:2012-10-07 20:42:49

标签: ruby-on-rails rmagick dreamhost fastcgi

使用以下指南

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

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

按照DH维基指南:

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中但没有效果。

2 个答案:

答案 0 :(得分:2)

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

在你的gemfile中......

gem 'paperclip'

然后从您的app目录运行“bundle install”。

在你的public / dispatch.fcgi中...复制下面的代码并用你的config / application.rb模块中列出的名称替换APPNAME,用你的DH用户名替换USER,用输出中列出的特定ruby版本替换RUBY来自DH ssh会话命令行中的“which ruby​​”。

#!/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-dreamhost-server/进行操作。

答案 1 :(得分:1)

RMagick和ImageMagick因编译/运行时问题而臭名昭着。我建议抛弃RMagick,转而使用像MiniMagick这样的东西。看起来CarrierWave有一个MiniMagick处理器,您可以使用它:https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/processing/mini_magick.rb

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

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