Rails的URL生成机制(大多数polymorphic_url在某些时候路由)允许将至少为GET请求序列化的哈希传递到查询字符串中.获得这种功能的最佳方法是什么,但是在任何基本路径之上?
例如,我想要有以下内容:
generate_url('http://www.google.com/', :q => 'hello world')
# => 'http://www.google.com/?q=hello+world'
Run Code Online (Sandbox Code Playgroud)
我当然可以编写自己的,完全符合我的应用程序的要求,但如果存在一些规范库来处理它,我宁愿使用它:).
Ruby gem的默认搜索路径是什么?我试图想我可以通过哪些目录gem的--install-dir开关,这样我就不必设置环境变量GEM_HOME对被发现的宝石.
特别是,如果我安装gem jekyll via
$ gem install --bindir /usr/local/bin --install-dir /usr/local/lib/ruby/gems/1.8 jekyll
Run Code Online (Sandbox Code Playgroud)
然后/usr/local/bin/jekyll在没有明确设置的情况下找不到它的库GEM_HOME:
$ jekyll --help
/usr/lib/ruby/1.8/rubygems.rb:779:in `report_activate_error': Could not find RubyGem jekyll (>= 0) (Gem::LoadError)
from /usr/lib/ruby/1.8/rubygems.rb:214:in `activate'
from /usr/lib/ruby/1.8/rubygems.rb:1082:in `gem'
from /usr/local/bin/jekyll:18
$ GEM_HOME=/usr/local/lib/ruby/gems/1.8 jekyll --help
Jekyll is a blog-aware, static site generator.
[ ... ]
Run Code Online (Sandbox Code Playgroud)
似乎ruby本身会查看Ruby变量中列出的目录,这些目录$LOAD_PATH可以通过环境变量进行扩充RUBYLIB.但是,rubygem系统在哪里搜索宝石?
使用Ubuntu,当我运行" bundle install"来设置我的Rails环境时,它会在JSON gem安装期间抛出一个错误:
Installing json (1.7.3) with native extensions
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/usr/bin/ruby1.9.1 extconf.rb
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mkmf (LoadError)
from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from extconf.rb:1:in `<main>'
Gem files will remain installed in /home/danny/.bundler/tmp/2040/gems/json-1.7.3 for inspection.
Results logged to /home/danny/.bundler/tmp/2040/gems/json-1.7.3/ext/json/ext/parser/gem_make.out
An error occured while installing json (1.7.3), and Bundler cannot continue.
Make sure that `gem install json -v '1.7.3'` succeeds before bundling.
Run Code Online (Sandbox Code Playgroud)
当我尝试只安装JSON 1.7.3 gem时,它也会给我一个错误:
Building native extensions. This could take …Run Code Online (Sandbox Code Playgroud) 我一直在阅读很多关于这个主题的内容,似乎没有什么能够满足我的需求.如果我重复或不清楚我对ruby和rails都是新手以及对stackoverflow的新手,我很抱歉.
我有一个现有的rails应用程序,里面有很多基础设施.我想采用它的一些模型,将它们嵌套在命名空间中,并将所有这些放入ruby gem中,以便在其他rails应用程序中使用.根据我的理解,rails的加载路径存在问题,因为它们是惯例,而定义另一个引擎的问题是因为你有两个并且它们会崩溃.
我一直在寻找指导或教程,以便在没有太多运气的情况下学习如何做到这一点,但我很肯定,如果有人可以指出我会很棒的话,那里会有一些东西.
我尝试使用引擎制作宝石会因碰撞或缺少导轨而失败.
我正在运行rails 3.2.3和ruby 1.9.3.
在访问主页时(成功运行后bundle install),新的rails应用程序出现此错误,未进行任何修改.
以下是版本号:
ruby: 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.2.1]
rails: 3.2.12
rvm: 1.18.14
gem: 2.0.0
bundler: 1.3.0.pre.8
打电话which ruby回报/Users/J/.rvm/rubies/ruby-1.9.3-p392/bin/ruby,看起来很可疑,对吧?
它给了我错误
gem install curb
Building native extensions. This could take a while...
ERROR: Error installing curb:
ERROR: Failed to build gem native extension.
/usr/bin/ruby1.9.1 extconf.rb
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mkmf (LoadError)
from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from extconf.rb:1:in `<main>'
Gem files will remain installed in /home/user1/.rvm/gems/ruby-1.9.3-p392/gems/curb-0.8.3 for inspection.
Results logged to /home/user1/.rvm/gems/ruby-1.9.3-p392/gems/curb-0.8.3/ext/gem_make.out
Run Code Online (Sandbox Code Playgroud)
rvm列表
rvm rubies
ruby-1.9.3-p385 [ broken ]
=* ruby-1.9.3-p392 [ x86_64 ]
ruby-2.0.0-p0 [ x86_64 ]
# => - current
# =* - current && default
# …Run Code Online (Sandbox Code Playgroud) 更新:已修复
我在另一个帖子中找到了答案.我使用的解决方法是告诉Nokogiri使用系统库:
NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install
Run Code Online (Sandbox Code Playgroud)
====
试图在Mac上安装nokogiri 1.6.0.在以前的版本中,我没有遇到任何问题.但1.6.0拒绝安装.这是错误:
Building native extensions. This could take a while...
ERROR: Error installing nokogiri:
ERROR: Failed to build gem native extension.
/Users/josenriq/.rvm/rubies/ruby-1.9.3-head/bin/ruby extconf.rb
Extracting libxml2-2.8.0.tar.gz into tmp/i686-apple-darwin11/ports/libxml2/2.8.0... ERROR
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Archive contains obsolescent base-64 headers
tar: Read 3 bytes from /Users/josenriq/.rvm/gems/ruby-1.9.3-head@wdi/gems/nokogiri-1.6.0/ports/archives/libxml2-2.8.0.tar.gz
tar: Error exit delayed from previous errors
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably …Run Code Online (Sandbox Code Playgroud) 我是rails的新手,并通过Hartl的教程.一切都很好,直到我第二次尝试做教程并创建了另一个试图使用最新版本的rails的项目.当我尝试rails server从app文件夹加载时,我收到以下错误.
$ rails s
=> Booting WEBrick
=> Rails 4.0.4 application starting in development on
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Exiting
/Users/sierra/Desktop/sample_app_2/config/environments/development.rb:1:in
`<top (required)>': undefined method `configure' for
#<SampleApp2::Application:0x00000101a74610> (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
我的Gemfile直接来自Hartl教程:
source 'https://rubygems.org'
ruby '2.1.0'
#ruby-gemset=railstutorial_rails_4_0
gem 'rails', '4.0.4'
group :development, :test do
gem 'sqlite3', '1.3.8'
gem 'rspec-rails', '2.13.1'
end
group :test do
gem 'selenium-webdriver', '2.35.1'
gem 'capybara', '2.1.0'
end
gem 'sass-rails', '4.0.1'
gem 'uglifier', '2.1.1' …Run Code Online (Sandbox Code Playgroud) $ rvm use
Using /home/owner/.rvm/gems/ruby-2.1.2
$ gem install rails
ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)
Errno::ECONNREFUSED: Connection refused - connect(2) for "your-dns-needs-immediate-attention.network" port 80 (http://your-dns-needs-immediate-attention.network/quick/Marshal.4.8/thread_safe-0.3.4.gemspec.rz)
$ gem update --system
...
$ gem -v
2.4.1
$ gem install rails
ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)
Errno::ECONNREFUSED: Connection refused - connect(2) for "your-dns-needs-immediate-attention.network" port 80 (http://your-dns-needs-immediate-attention.network/quick/Marshal.4.8/rails-4.1.5.gemspec.rz)
Run Code Online (Sandbox Code Playgroud)
我试过了:
gem update --systemhttps://production.cf.rubygems.org为宝石源(参见下面的错误)https://rubygems.org/通过我的浏览器连接$ curl -v --head https://rubygems.org输出:http: //pastebin.com/ca6DAvaU …