我有以下CarrierWave初始化程序,可以在我的Heroku / MONGOHQ / GridFS环境中正常工作:
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'ur / generic'但不起作用。
有人知道吗? 提前致谢 卢卡
答案 0 :(得分:1)
另一种解决方案是在项目根目录中添加“.env”文件,并定义环境变量,如:
MONGOHQ_URL=mongodb://someuser:somepass@paulo.mongohq.com:10040/appid
答案 1 :(得分: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']参数值。
如果你有更好的方法,请分享一下吗? 非常感谢 :-) 卢卡
答案 2 :(得分:0)
在初始值设定项中,您可以执行此操作:MongoHQ Heroku docs
中指定的URI.parse(ENV['MONGOHQ_URL'] || 'some_other_link')