0

我有以下 CarrierWave 初始化程序,它在我的 Heroku/MONGOHQ/GridFS env 上运行良好:

CarrierWave.configure do |config|
  config.storage = :grid_fs
  uri = URI.parse(ENV['MONGOHQ_URL'])
  config.grid_fs_database = File.basename(uri.path)
  config.grid_fs_host = uri.host unless uri.host.blank?
  config.grid_fs_port = uri.port unless uri.port.blank?
  config.grid_fs_username = uri.user unless uri.user.blank?
  config.grid_fs_password = uri.password unless uri.password.blank?
  config.grid_fs_access_url = '/gridfs'
  config.cache_dir = "uploads"
  config.root = Rails.root.join('tmp')
end

但是,当我尝试在本地(在开发中)运行代码时,出现以下错误:

`split': bad URI(is not URI?):  (URI::InvalidURIError)

这是完整的堆栈: http: //pastie.org/1630069我试图在初始化程序顶部添加 require 'uri/generic' 但不起作用。

有人知道方法吗?在此先感谢卢卡

4

3 回答 3

1

另一种解决方案是在项目根目录中添加一个“.env”文件并在那里定义环境变量,例如:

MONGOHQ_URL=mongodb://someuser:somepass@paulo.mongohq.com:10040/appid
于 2013-08-18T13:32:46.510 回答
0

正如 KenB 所建议的那样,ENV['MONGOHQ_URL'] 没有在我的本地机器开发环境中设置:

lsoave@ubuntu:~/rails/heroku/mp3upload$ rails c
Loading development environment (Rails 3.0.5)
ruby-1.9.2-p136 :001 > ENV['MONGOHQ_URL']
 => nil 
ruby-1.9.2-p136 :002 > 

这是一个没有初始化程序的分支,所以在我的本地机器上我不得不跳过它。我是这样做的:

    if ENV['MONGOHQ_URL']
      CarrierWave.configure do |config|
        config.storage = :grid_fs
        uri = URI.parse(ENV['MONGOHQ_URL'])
        config.grid_fs_database = File.basename(uri.path)
        config.grid_fs_host = uri.host unless uri.host.blank?
        config.grid_fs_port = uri.port unless uri.port.blank?
        config.grid_fs_username = uri.user unless uri.user.blank?
        config.grid_fs_password = uri.password unless uri.password.blank?
        config.grid_fs_access_url = '/gridfs'
        config.cache_dir = "uploads"
        config.root = Rails.root.join('tmp')
      end
    end

我认为这应该是在引导过程中跳过 Ralis 3.0.5 初始化程序的更好方法,条件是 ENV['MONGOHQ_URL'] 参数值。

如果你有更好的方法,可以分享一下吗?非常感谢 :-) 卢卡

于 2011-03-04T06:38:51.643 回答
0

在您的初始化程序中,您可以执行以下操作:URI.parse(ENV['MONGOHQ_URL'] || 'some_other_link')MongoHQ Heroku 文档中所述

于 2012-04-25T12:27:27.860 回答