基于actioncable-examples构建websockets app.启动服务器,运行rake等时,我不断收到消息:
Array values in the parameter to `Gem.paths=` are deprecated.
Run Code Online (Sandbox Code Playgroud)
这里没有看到解决方案,但确实找到了解决方案.我想在这里发布问题和答案,以便它可用.
Ruby 2.0.2,Rails 4.0.3,Sorcery 0.8.5
我试图在我的代码中发出重定向,只是为了接收已经发出重定向或渲染的错误消息.如果是这样的话,我很高兴回来.但是,如果由于任何其他原因调用该方法,我想检查是否已发出重定向或呈现,如果没有,则发出它.代码是基于Sorcery的身份验证.
在应用程序控制器中,我有:
def not_authenticated
redirect_to login_url # , :alert => "First log in to view this page."
end
Run Code Online (Sandbox Code Playgroud)
这最终检查current_user,如下所示:
def current_user
@current_user ||= @view.current_user unless @view.blank?
begin
@current_user ||= Associate.find(session[:user_id]) unless session[:user_id].blank?
rescue ActiveRecord::RecordNotFound => e
return
end
current_user = @current_user
end
Run Code Online (Sandbox Code Playgroud)
在救援中,我想确定是否已经发生重定向或渲染,以便我可以重定向到login_url,如果没有.当然,这意味着它是从一种不同的方法调用的.谢谢.
我只是安装phpunit.phar并试图设置它.我想要做的是将phpunit.phar放在路径中,以便我可以直接从php cli运行它.此时,它位于我的include_path中,我可以将它包含在任何地方的脚本中.但是,我认为我需要做的是从cli"php phpunit.phar"运行它.
这是可行的还是适当的?
谢谢... RG
这对我来说似乎没问题,我找不到任何其他说明的文档,但我希望它经过验证.我有一段代码可能会失败,无论出于何种原因,如果它确实失败就会确保它保护它,然后无论发生什么都需要执行一些代码.这似乎需要一个嵌套的begin/ensure块.这有效吗?(这里没有实际的救援,只是那种类型的阻止.)
代码如下:
begin
# save default state
begin
# save current state
# set state for this snippet
# snippet
ensure
# return current state or default if none
end
ensure
# schedule next execution of this code, always.
end
Run Code Online (Sandbox Code Playgroud) 从一开始,我就是Windows大师.我开始使用MS-DOS.我从那以后就把Windows 2.1和每个Windows都放了.我现在在家里运行着10个不同的Windows机箱,从Windows 7旗舰版到各种风格的Windows服务器.我还没有完成Windows 8,也不想去那里.
我有UNIX服务器和各种软件的经验,但它不是我喜欢的环境.但是,我想我正在转换.我试图假装使用Cygwin和MSYS在Windows下运行UNIX.我的目的是建立一个开发环境.两个都让我失望了.我花了更多的时间来解决一系列技术问题而不是我开发的问题.这是不可接受的.
我的Ruby on Rails开发环境是目前我当前的最高优先级.我现在有网站建设.
在这一点上,我有两个选择.一种是在云中找到UNIX开发环境.另一种是将我的许多机器之一转换为真正的UNIX系统.所以,我需要建议.我真的不想建立和照顾一个系统.基于云的开发环境的想法是非常有趣的,但需要注意的是,我不会像Cygwin和MSYS那样追逐另一个鼠洞.
这是问题.是否有基于云的Ruby on Rails友好开发环境?如果不这样做,我应该建立一个基于Ubuntu的系统.如果我去那里,我会转换工作站还是服务器?
谢谢...
我正在使用Devise并尝试使用Devise.friendly_token来生成密码,但却发现它产生了不需要的特殊字符.我发现Devise.friendly_token实际上使用了这个方法:
SecureRandom.urlsafe_base64(15).tr('lIO0', 'sxyz')
Run Code Online (Sandbox Code Playgroud)
试图删除" - ","="和"_"的特殊字符,我用以下代码替换了Devise.friendly_token调用:
SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU')
Run Code Online (Sandbox Code Playgroud)
但是,我发现有一个过多的"U"字符,取代了下划线(显然其中一些实际上是"U").所以,我尝试了这个调用,它消除了"_"到"U"的翻译.
SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM')
Run Code Online (Sandbox Code Playgroud)
这显示了更合理的结果分布,但它仍然留下了下划线的特殊性.
谁能告诉我为什么会这样,以及如何解决它?示例输出是:
irb(main):017:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "mvgjptsy"
irb(main):018:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "UUh1fUU-"
irb(main):019:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "UgU4U981"
irb(main):020:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "UUUU1q27"
irb(main):021:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "ajU7zjUn"
irb(main):022:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "UxgUwt7U"
irb(main):023:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "UUpUcUvU"
irb(main):024:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "U4UbU2ho"
irb(main):025:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "icsU7bcs"
irb(main):026:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "5vfdfUoU"
irb(main):027:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "1Q71wib4"
irb(main):028:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "TzkKT9s6"
irb(main):029:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "iWGBgys_"
irb(main):030:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用simple_form编辑/更新模型记录,但表单不会直接更改模型字段.相反,我提供了几个check_box_tag字段,用于告知更新需要更改的字段.因此,更新未收到可用于更新属性的params [:device]哈希.我正在尝试创建此哈希,但是当我发出@ device.update_attributes(params [:device])时,我得到了ForbiddenAttributesError.
我相信我的强参数列表是正确的.如果我允许在编辑视图中处理一个模型字段(名称),我会收到预期的参数[:device]哈希,一切正常.如果我禁用该字段,因为我不希望它被更改,那么我需要自己创建该哈希并收到错误.当我查看我创建的哈希时,它看起来等同于视图传递的哈希.我不明白为什么会失败.
环境是Ruby 2.0.0,Windows 8.1上的Rails 4.1和RubyMine 6.3.
表格是:<...一旦工作需要正确的格式...>
<%= simple_form_for @device do |f| %>
<legend><%= controller.action_name.capitalize %> Device:</legend>
<%= f.input :name, disabled: true %>
<%= check_box_tag(:is_admin, 0, @device.admin?) %>
<%= label_tag(:is_admin, "Make admin?") %>
<%= check_box_tag(:chg_pwd) %>
<%= label_tag(:chg_pwd, "Change password?") %>
<%= f.button :submit %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我发送f.input:name,disabled:false并允许视图生成params [:device]时收到的params [:device]是:
ActionController::Parameters (3 element(s))
"{"name"=>"D105", "password"=>"D105Dvgr", "password_confirmation"=>"D105Dvgr"}"
Run Code Online (Sandbox Code Playgroud)
一切正常.
我创建的参数[:device]是:
ActionController::Parameters (3 element(s))
"{"name"=>"D106", "password"=>"D106VdAd", "password_confirmation"=>"D106VdAd"}"
Run Code Online (Sandbox Code Playgroud)
并且,我收到禁用属性错误,即使我看到两者之间没有区别.
更新是:<...代码需要重构,一旦工作......>
class DevicesController < ApplicationController
before_filter :authenticate_device!
... other methods …Run Code Online (Sandbox Code Playgroud) 我有一个使用twitter bootstrap和sass的rails项目.scss文件被构造成文件夹,所以我有一个更好的概述.现在我想为包含我的颜色等的全局变量定义一个文件,并将这些值传递给其他文件,这样我的冗余代码就少了.虽然所有代码都已正确导入和应用,但变量不起作用.
这是当前的设置:
样式表/ application.css.scss
/*
*= require_self
*= require_tree
*/
/*
stylesheets/
|
|– base/
| |– _reset.scss # Reset/normalize
| |– _typography.scss # Typography rules
|
|– components/
| |– _buttons.scss # Buttons
| |– _messages.scss # Nachrichten
| |– _dropdown.scss # Dropdown
|
|– helpers/
| |– _globals.scss # Sass Variables
| |– _functions.scss # Sass Functions
| |– _mixins.scss # Sass Mixins
| |– _helpers.scss # Class & placeholders helpers
//more files omitted
|
|– vendors/ …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现Ruby Java Bridge(RJB)gem以与JVM通信,以便我可以运行Open-NLP gem.我在Windows 8上安装并运行了Java.至少我所知道的所有迹象都表明Java已经安装并且可以运行.但是,使用RJB的尝试失败并显示消息"无法创建Java VM".(在其他情况下,我有时会为"小提琴:模块"获得"未定义的方法`dlopen",这也是难以辨认的.)
我最初只是默认安装JDK.由于我的64位系统,这安装了64位Java.我不确定Ruby和RJB是否会与之对话,所以我安装了32位JRE.但是,错误是一样的.
是否有任何进一步的测试可以确保JVM在Ruby之外工作?
有人能告诉我运行Windows/Ruby/RJB/JVM可能需要做些什么吗?
谢谢...
我使用BitNami Rubystack和Ruby 1.9.3p448运行Windows 8.
根据testjava.jsp,Java似乎可用:
这是代码,包括我找到它的URL:
class FiddleTry
# http://devjete.wordpress.com/2011/01/31/installing-rjb-1-3-4-on-windows-7-32bit-wo-vc/
require 'rjb'
out = Rjb::import('java.lang.System').out <== Line 5 is here
out.print('Hello Rjb from ')
p out._classname
end
Run Code Online (Sandbox Code Playgroud)
以下是错误消息:
C:/Users/Richard/RubymineProjects/Utilities/fiddle_try.rb:5:in `import': can't create Java VM (RuntimeError)
from C:/Users/Richard/RubymineProjects/Utilities/fiddle_try.rb:5:in `<class:FiddleTry>'
from C:/Users/Richard/RubymineProjects/Utilities/fiddle_try.rb:1:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
Run Code Online (Sandbox Code Playgroud)
我找不到任何关于为什么它"无法创建Java VM"的其他信息.如果我能获得更多信息,那将会非常有用.我会很感激这些信息或修复此问题.谢谢...
编辑添加有关RJB的开放式NLP要求的信息......
这是我试图运行的代码,取自Github/Open-nlp:
class OpenNlpSample
ENV['JAVA_HOME'] = "C:/Program Files/Java/jdk1.7.0_25" if ENV['JAVA_HOME'].nil?
ENV['LD_LIBRARY_PATH'] = "C:/Program Files/Java/jdk1.7.0_25/bin; C:/Program Files (x86)/Java/jre7" if ENV['LD_LIBRARY_PATH'].nil?
# …Run Code Online (Sandbox Code Playgroud) 编辑:显示在最后,发现实际创建了升级标头.
我正在使用action-cable-example代码库,尝试构建一个WebSocket应用程序."Chatty"应用程序,取决于应用程序中提供的浏览器客户端,工作正常.但是,我不打算使用该客户端,因为我需要外部IoT连接.因此,我正在尝试将ws/wss WebSocket协议实现到外部非浏览器设备,并且我在route.rb中的连接是:
mount ActionCable.server => '/cable'
Run Code Online (Sandbox Code Playgroud)
我尝试了几个外部客户端,例如使用sample/client.rb 的Chrome Simple WebSocket Client扩展和gem websocket-client-simple.在这两种情况下,ActionCable都不返回升级头.Chrome扩展程序抱怨如下:
WebSocket connection to 'ws://127.0.0.1:3000/cable' failed: Error during WebSocket handshake: 'Upgrade' header is missing
Run Code Online (Sandbox Code Playgroud)
实际的握手表明这是真的,如:
**General**
Request URL:ws://127.0.0.1:3000/cable
Request Method:GET
Status Code:101 Switching Protocols
**Response Headers**
view source
Connection:keep-alive
Server:thin
**Request Headers**
view source
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:Upgrade
Cookie:PPA_ID=<redacted>
DNT:1
Host:127.0.0.1:3000
Origin:chrome-extension://pfdhoblngboilpfeibdedpjgfnlcodoo
Pragma:no-cache
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
Sec-WebSocket-Key:1vokmzewcWf9e2RwMth0Lw==
Sec-WebSocket-Version:13
Upgrade:websocket
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36
Run Code Online (Sandbox Code Playgroud)
根据标准,响应标头是这样的:
HTTP/1.1 101 …Run Code Online (Sandbox Code Playgroud)