小编Pet*_*wis的帖子

如何使用名称在参数中给出的模块扩展ruby中的对象?

我想用一个模块扩展一个Ruby对象,但我希望能够在运行时更改要使用的模块,并且能够通过对象改变它.换句话说,我想将模块的名称extend作为参数传递给我.我怎样才能做到这一点?

我尝试了以下方法:

module M1
end

module M2
end

class C
  def initialize module_to_use
    extend module_to_use
  end
end

m = get_module_name_from_config_file
c1 = C.new m
Run Code Online (Sandbox Code Playgroud)

(假设该方法get_module_name_from_config_file返回String带有所需模块名称的a - 这里"M1"或者"M2".)

但我明白了:

error: wrong argument type String (expected Module).
Run Code Online (Sandbox Code Playgroud)

因为m是类型String,不是Module,显然.我试了一下m是一个符号太多,但我得到了同样的问题(更换StringSymbol错误消息).

那么,我可以转换m成类型的东西Module吗?或者还有另一种方法可以达到这个目的吗?

提前致谢.

ruby inheritance

5
推荐指数
1
解决办法
154
查看次数

在Heroku上安装rmagick gem的问题

我正在尝试将Rails应用程序推送到Heroku,但是当它尝试构建rmagick gem(在Gemfile中指定)时它失败了.我已在bundle install本地完成,应用运行正常.

但是,在预接收钩子中的Heroku上,在构建rmagick示例之后,我得到:

make install

/usr/ruby1.8.7/bin/ruby setup.rb install
rm -f InstalledFiles
---> lib
mkdir -p /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib
install RMagick.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/
---> lib/rvg
mkdir -p /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install embellishable.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install pathdata.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install stylable.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install describable.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install deep_equal.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install misc.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install text.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install rvg.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install container.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install stretchable.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install paint.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install clippath.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install units.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install transformable.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
<--- lib/rvg
<--- lib
---> ext
---> ext/RMagick
mkdir -p /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rmagick heroku

0
推荐指数
1
解决办法
2737
查看次数

标签 统计

ruby ×2

heroku ×1

inheritance ×1

rmagick ×1

ruby-on-rails ×1