小编Geo*_*ieF的帖子

从用于Ruby FFI接口的字符串转换为const char*时的C++字符编码

我正在使用外部C++库进行一些HTTPS通信并提供XML服务器响应.在服务器端,响应通过编码ISO-8859-15,我得到一个std::string代表API的响应.当我打印出来/将其写入文件时,它看起来是正确的.

std::stringint错误代码必须要传递给我的外部调用者.所以我在结构中返回两个值:

extern "C" {
  struct FoobarResponse {
    const char* responseText;
    int returnCode;
  };
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我必须在之前的帮助下将std::string响应转换为const char*C风格的字符串表示std::c_str().原因:我的调用者是一个Ruby脚本,它利用Ruby FFI与我的C++ lib进行通信,这里的中间语言类型转换是Ruby :: string - > C :: const char*.

有趣的是:如果我std::cout把它转换成结构后转换后的字符串,它仍然可以.

问题:在Ruby端处理服务器响应时,它已被破坏.而不是原来的答案,如:

<?xml version="1.0" encoding="ISO-8859-15"?>
<Foobar xmlns="http://www.foobar.com/2012/XMLSchema">
  ...
</Foobar>
Run Code Online (Sandbox Code Playgroud)

我收到一个显然包含不可打印字符的字符串,它总是在开头和结尾处断开.

?O[
l version="1.0" encoding="ISO-8859-15"?>
<Foobar xmlns="http://www.foobar.com/2012/XMLSchema">
</Fo??
Run Code Online (Sandbox Code Playgroud)

事实上,字符串至少包含换行符,回车符和制表符,可能更多.

我尝试:force_encoding在Ruby方面的字符串ASCII-8BIT,ISO-8859-15UTF-8没有改变.在使用此代码将字符串放入struct和base64解码之前,我尝试在C++端进行base64编码,没有任何更改.

我有无数的训练使用转换字符串Iconv,没有变化.

我还尝试从字符串中删除不可打印的字符,然后将其放入结构中,但我没有成功.

我不知道这里发生了什么,没有选择.有人能指出我正确的方向吗?

问菲利克斯

c++ ruby encoding ffi

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

为什么没有在 XHR 请求上设置设计 cookie?

我在提供 JSON API 的 Rails4 应用程序上使用设计。我修补了设计,因此它通过 HTTP 标头而不是 URL 参数接受身份验证令牌。这很好用。

基于该 API 的 JS 单页应用程序运行良好。我可以对用户进行身份验证,并在应用程序内请求此用户资源。

此外,我希望服务器(设计)设置一个 cookie,以便基于 cookie 的身份验证工作,并且我也可以通过非 XHR 请求请求用户私有资源。这不起作用,我不知道为什么。

我有我的设计初始化程序:

config.http_authenticatable_on_xhr = true
Run Code Online (Sandbox Code Playgroud)

在我的 session_store 初始值设定项中,我设置了:

MyApp::Application.config.session_store :cookie_store, key: '_myapp_session', domain: :all, httponly: false, secure: false
Run Code Online (Sandbox Code Playgroud)

当我在 Chrome 中运行我的单页应用程序并检查网络请求时,我可以看到对服务器端资源请求的每个响应都包含一个Set-CookieHeader,如下所示:

HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Ua-Compatible: chrome=1
Access-Control-Allow-Origin: * //dont give me shelter
Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS, DELETE
Access-Control-Max-Age: 1728000
X-Meta-Request-Version: 0.2.8
Etag: "7b64cd327b9ff8dce6bb8b616aeee2b8"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 1d6be45e-ce45-40fd-b03b-358644826955
X-Runtime: …
Run Code Online (Sandbox Code Playgroud)

cookies ruby-on-rails xmlhttprequest devise ruby-on-rails-4

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

backbone.js:了解浏览器事件处理和视图删除

我正在摆弄一个看起来像这样的视图和相关模型:

App.Views.Addresses         = App.Views.Addresses || {};
App.Views.Addresses.Address = Backbone.View.extend({

  events: {
    "click button#foo"             : "clear"
  },

  initialize: function(model){
                this.address = model.model;
                this.address.view = this;
                _.extend(this, Backbone.Events);
                this.render();
              },

  render:     function(){
                ... rendering stuff
              },

  clear:      function(){
                this.address.clear();
              }
});
Run Code Online (Sandbox Code Playgroud)

var Address = Backbone.Model.extend({

  url:   function() {
           ... url stuff
         },

  clear: function(){
           this.destroy();
           this.view.remove();
         }
});
Run Code Online (Sandbox Code Playgroud)

我在这里遇到两个问题.第一个:

我的源代码中有一个id ="foo"的按钮,希望该视图捕获此按钮的"click"事件并触发'clear'事件.问题:这不起作用.

无论如何,手动调用我的模型'清除'干净地删除服务器上的数据,但不删除视图本身.这是第二个问题.希望有经验的人能够启发我.

先谢谢菲利克斯

events backbone.js underscore.js

4
推荐指数
1
解决办法
5182
查看次数

Lion:RVM安装rubies的问题 - 与openssl相关的问题

我已经绝望了,现在两个(!!)天都没有解决方案来解决以下问题.

在更新Lion之后,我想使用最新版本的rvm安装其他红宝石.

以下是我之后调用bundler时会发生的事情:

/Users/felix/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': dlopen(/Users/janroesner/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/x86_64-darwin11.1.0/digest/sha1.bundle, 9): Symbol not found: _SHA1_Init (LoadError)
Run Code Online (Sandbox Code Playgroud)

好的,openssl问题.所以我检查了没有openssl但是/ usr中的系统有/ usr/lib中的库和/ usr/include/openssl中的头文件.校验.

我决定用brew安装一个更新的版本.之后,没有ruby编译已经定义了BN_rand_range和BN_peudo_rand_range的错误.

似乎是对最近的gcc进行更严格的类型检查,所以我在/usr/include/openssl/bn.h中取消注释导致冲突的411和412行导致ruby定义了它自己.现在ruby编译但我收到相同的错误符号未找到:_SHA1_Init.

所以我删除了openssl头文件bn.h中的注释,我之前放在那里并尝试相反的方法.我在〜/ .rvm/src/ruby​​-1.9.2-p290/ext/openssl/openssl_missing.h中对这些行进行了评论.

结果相同.

之后我完全删除了〜/ .rvm,重新安装它......并且有同样的问题.

现在我试过了:

rvm pkg install openssl
rvm remove 1.9.2-p290
rvm install 1.9.2-p290 -C --with-openssl-dir=$rvm_path/usr
Run Code Online (Sandbox Code Playgroud)

结果相同.

我很绝望.有人可以帮忙吗?问菲利克斯

ruby openssl rvm osx-lion

4
推荐指数
1
解决办法
4902
查看次数

如何组织sass文件,因此指南针按正确的顺序包含它们

我正在使用最新的yeoman构建1.0.0beta3和指南针0.12.2构建单页面应用程序

在开始时compass:server我会遇到很多错误,但在开发时我的浏览器中似乎都没问题.grunt build然后不会失败,但构建不正确的CSS输出,以便浏览器中的布局是borken.也许这是我的错,是由于误解造成的.

我所拥有的是main.sass包含我所有包含的文件:

// compass
@import 'compass'
@import 'compass/reset'
@import 'compass/css3'
... and so on

//custom includes in the right order
@import 'base/dimensions'
@import 'base/colors'
@import 'base/layout'
Run Code Online (Sandbox Code Playgroud)

该文件base/dimensions现在定义:

// height of the footer
$footer-height: 50px
Run Code Online (Sandbox Code Playgroud)

而且(后来)base/layout我在使用它:

.content-bg
  background-color: rgba(0, 0, 0, 0.05)
  bottom: $footer-height
  ... and more
Run Code Online (Sandbox Code Playgroud)

现在启动grunt和罗盘服务器时,我收到以下错误:

Running "compass:server" (compass) task
directory .tmp/styles/ 
  create .tmp/styles/avendor_font-awesome.css 
  create .tmp/styles/base_colors.css 
  create .tmp/styles/base_dimensions.css 
  error app/styles/base_layout.sass (Line 23: Undefined variable: "$footer-height".)
Run Code Online (Sandbox Code Playgroud)

还有很多类似的错误.(在开发时间内,页脚高度确实正常.)

我不知道如何解决这个问题,我不知道是否在构建运行后导致不正确的CSS.但是当我通过发布构建时, …

gruntjs yeoman compass-sass

3
推荐指数
1
解决办法
3531
查看次数

为什么Backbone 1.0.0中的Collection.fetch()没有触发'reset'事件

我有一个带有followig代码的集合视图:

class FoosCollectionView extends Backbone.View
  el: '#foos'

  initialize: ->
    @collection = new FoosCollection [],
      barId: @options.barId
      foozId: @options.foozId

    @listenTo @collection, 'sync', @render
    @collection.fetch()

  template: MyApp.Templates.foos

  render: (event)->
    $(@el).html @template @collection
    @

FoosCollectionView
Run Code Online (Sandbox Code Playgroud)

在Backbone 1.0.0之前reset,fetch在集合完成时触发了一个事件.现在sync事件被触发,但我不知道这是由于错误还是新标准行为.

谁能告诉我,为什么reset不再触发?

问菲利克斯

backbone.js

2
推荐指数
1
解决办法
1362
查看次数

为什么gem无法自动编译我的C扩展名

我构建了一个Ruby gem,它需要一些C扩展。一旦编译完成,就通过Ruby FFI将其绑定到gem中。

我的设置:我将bundle用于宝石支架。在我的gems文件夹中,有一个子文件夹ext。这包括一个静态Makefile,另一个子文件夹source和一个extconf.rb。

source文件夹包含所有.c和.h文件。

Makefile不必动态创建。如果我呼吁make clean && makeext一切编译,以及宝石的作品如预期。

现在,我给extconf.rb提供以下内容:

require 'mkmf'
require 'fileutils'

# Give it a name
extension_name = 'somename'

# The destination
dir_config extension_name

# Do the work
create_makefile extension_name

# Overwrite Makefile
FileUtils.cp 'Makefile.template', 'Makefile'
Run Code Online (Sandbox Code Playgroud)

所以我让mkmf首先创建一个Makefile,然后再用我的静态模板覆盖它。笨。

当我现在通过构建我的gem rake build并尝试将其安装在另一台计算机上时,该扩展名未编译。

谁能告诉我,为了让扩展在安装时自动编译,我该怎么做?

ruby rubygems makefile ruby-c-extension ruby-ffi

2
推荐指数
1
解决办法
318
查看次数