使用will_paginate gem时无法部署到micro cloudfoundry实例

时间:2012-06-04 11:52:43

标签: cloudfoundry

我正在尝试按照此处的指南进行操作:http://docs.cloudfoundry.com/frameworks/ruby/rails-3-1.html

我已经解决了许多问题,比如jquery gem,但是我找不到可以解决will_paginate gem问题的文档。任何人都有任何想法为什么cloudfoundry讨厌will_paginate?

来自cloud_controller.stderr.log

ERROR:  While executing gem ... (ArgumentError)
invalid byte sequence in US-ASCII
/var/vcap/packages/cloud_controller/cloud_controller/vendor/bundle/ruby/1.9.1/gems/vcap_staging-0.1.37/lib/vcap/staging/plugin/gemfile_task.rb:90:in `block in install_gems': Failed installing will_paginate-3.0.3.gem (RuntimeError)
from /var/vcap/packages/cloud_controller/cloud_controller/vendor/bundle/ruby/1.9.1/gems/vcap_staging-0.1.37/lib/vcap/staging/plugin/gemfile_task.rb:78:in `each'
from /var/vcap/packages/cloud_controller/cloud_controller/vendor/bundle/ruby/1.9.1/gems/vcap_staging-0.1.37/lib/vcap/staging/plugin/gemfile_task.rb:78:in `install_gems'
from /var/vcap/packages/cloud_controller/cloud_controller/vendor/bundle/ruby/1.9.1/gems/vcap_staging-0.1.37/lib/vcap/staging/plugin/gemfile_task.rb:47:in `install'
from /var/vcap/packages/cloud_controller/cloud_controller/vendor/bundle/ruby/1.9.1/gems/vcap_staging-0.1.37/lib/vcap/staging/plugin/gemfile_support.rb:34:in `compile_gems'
from /var/vcap/packages/cloud_controller/cloud_controller/vendor/bundle/ruby/1.9.1/gems/vcap_staging-0.1.37/lib/vcap/staging/plugin/rails3/plugin.rb:49:in `block in stage_application'
from /var/vcap/packages/cloud_controller/cloud_controller/vendor/bundle/ruby/1.9.1/gems/vcap_staging-0.1.37/lib/vcap/staging/plugin/rails3/plugin.rb:45:in `chdir'
from /var/vcap/packages/cloud_controller/cloud_controller/vendor/bundle/ruby/1.9.1/gems/vcap_staging-0.1.37/lib/vcap/staging/plugin/rails3/plugin.rb:45:in `stage_application'
from /var/vcap/data/packages/cloud_controller/32/cloud_controller/script/run_plugin.rb:30:in `<main>'

2 个答案:

答案 0 :(得分:2)

首先让我说我把以下内容推到了cloudfoundry.com作为初始测试。仍在使用MCF,并在确认一个时发送更新。

我创建了一个非常简单的postapp,并使用了以下[simple] Gemfile:

source 'https://rubygems.org'
gem 'rails', '3.1.1'
gem 'sqlite3'
gem 'mysql2'
gem 'json'
gem 'thin'
gem 'will_paginate', '~> 3.0'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
  #gem 'sass-rails',   '~> 3.2.3'
  #gem 'coffee-rails', '~> 3.2.1'
  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platform => :ruby
  gem 'uglifier', '>= 1.0.3'
end

gem 'cloudfoundry-jquery-rails'

然后做了:

bundle package

vmc push postappg --runtime=ruby19

....它有效。

答案 1 :(得分:2)

我还可以确认将raails应用程序部署到cloudfoundry.com,并将will_paginate捆绑在工作正常。

如果您可以发布Gemfile的内容,那将会有很大的帮助,稍微阅读一下这个问题我认为will_paginate的错误可能是一个红色的鲱鱼。

值得注意的是,您实际上不必使用Rails 3.1,最新版本3.2.5也可以正常工作。

====更新====

好的,我用微型CloudFoundry和一个测试应用程序复制了这个问题,该应用程序使用了80yoctane在他的答案中使用的相同Gemfile。

这个问题实际上并不是will_paginate的问题,而是gem内部文件的编码问题。 will_paginate由MislavMarohnić撰写,我实际上只是从github上的gemspec中复制了他的名字,注意他名字中的双重角色!和我在一起... ...

Cloudfoundry.com和Micro Cloudfoundry安装宝石的方式存在细微差别,两者都使用'env'工具设置运行'gem install'的环境,但是,Micro Cloudfoundry运行的版本稍微偏旧vcap-staging gem不包含用于将语言设置为UTF8的env选项,默认情况下env似乎使用US-ASCII。

因此,要解决这个小问题,您只需要进入Micro Cloudfoundry实例并以root身份编辑;

/var/vcap/packages/cloud_controller/cloud_controller/vendor/bundle/ruby/1.9.1/gems/vcap_staging-0.1.37/lib/vcap/staging/plugin/gemfile_support.rb

并更改以下块;

safe_env << " PATH='%s'" % [ path.uniq.join(":") ]

base_dir = StagingPlugin.platform_config["cache"]

看起来像;

safe_env << " PATH='%s'" % [ path.uniq.join(":") ]
safe_env << " LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8"

base_dir = StagingPlugin.platform_config["cache"] 

你根本不需要重新启动任何东西,只需再次推送应用程序,一切都应该正常工作。