我正在尝试用Sinatra和ActiveRecord(3.2.3)创建一个小应用程序.
这是我的主文件的样子:
require "sinatra"
require "sinatra/reloader"
require "active_record"
...
ActiveRecord::Base.establish_connection(
adapter: 'sqlite3',
database: 'db.sqlite3',
host: 'localhost',
)
class Post < ActiveRecord::Base
...
end
get('/') { ... }
get('/posts') { ... }
...
Run Code Online (Sandbox Code Playgroud)
它有效,但有时我会在控制台中收到警告:
弃用警告:数据库连接不会自动关闭,请通过调用连接关闭线程末尾的数据库
close连接.例如:ActiveRecord :: Base.connection.close'
发生警告时,页面刷新需要很长时间.我不明白我应该在哪里关闭连接.我试图放在 ActiveRecord::Base.connection.close文件的底部,但它没有帮助.
更新:
我忘了提到我还使用来自sinatra-contrib gem的sinatra/reloader插件来查看效果,而无需重新启动服务器.
require "sinatra/reloader"
Run Code Online (Sandbox Code Playgroud)
如果我发表评论,那么问题就会消失.但无论如何,我想知道如何在不禁用重新加载器的情况下解决问题.
请考虑以下示例
process.stdin.resume();
process.stdin.on("data", function(data) {
console.log("recieved " + data)
})
process.stdin.write("foo\n")
process.stdin.write("bar\n")
Run Code Online (Sandbox Code Playgroud)
当我输入something终端时,我明白了
received something
Run Code Online (Sandbox Code Playgroud)
为什么不以同样的方式进行工作foo和bar我先前发送使用stdin.write?
例如,如何stdin.on("data)在代码中触发此事件()?我应该process.stdin.write这样做,但我只是得到相同的输出.
我to_param在Category模型中覆盖了方法
def to_param
name
end
Run Code Online (Sandbox Code Playgroud)
和 routes.rb
get '/:id' => 'categories#show', :as => :category
Run Code Online (Sandbox Code Playgroud)
当name参数不包含任何点(foobar)时,一切正常,但是当它(f.o.o.b.a.r)时,我得到一个错误No route matches [GET].所以我的问题是:是否可以在路由中使用点作为参数名称的一部分?或者我可以做些什么来完成这个目的,也许是一些钩子或什么的.任何帮助表示赞赏.
我想用最简单的方法从字符串中删除所有字符.例如,从"a,sd3 31ds"到"asdds"
我的CAD做这样的事情:
"a,sd3 31ds".gsub(/\W/, "").gsub(/\d/,"")
# => "asdds"
Run Code Online (Sandbox Code Playgroud)
但它看起来有点尴尬.也许有可能将这些rexegs合并为一个?
我想生成带有自定义html属性的复选框(以后使用UJS).这是我的观看代码
<%= check_box_tag "data-toggle-completed" => "" %>
Run Code Online (Sandbox Code Playgroud)
它给了我
<input id="__data-toggle-completed______" name="{"data-toggle-completed"=>""}" type="checkbox" value="1">
Run Code Online (Sandbox Code Playgroud)
但我想要
<input type="checkbox" data-toggle-completed="">
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
关于节点和nob-blocking IO的知识非常有限,请原谅我,如果我的问题太天真了.
为了在响应主体中返回所需信息,我需要
我的问题是......我怎么能等待回复?或者只有当我收到来自API的响应时才能将信息发送到客户端(据我所知,在这种情况下连接应该是双向的,这意味着我将无法使用HTTP这样做).
而另一个问题.如果一个请求等待来自API的响应,这是否意味着其他用户也将被迫等待(因为节点是单线程的),直到我将线程/进程的数量从1增加到N?
我有以下数据库
sudo -u postgres psql -c "\list"
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
postgres | postgres | LATIN1 | en_US | en_US |
template0 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
Run Code Online (Sandbox Code Playgroud)
我怎样才能改变编码从LATIN1到UTF8数据库template1或template0?
我的回购中包含一个本地npm包(node_modules由于其超过200mb的大小,我没有将整个包含在我的仓库中,只有我必须修改的特定包才能满足我的需求).
在package.json,本地包声明如下所示:
dependencies : {
local_package: "./my_local_package"
...
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误
npm ERR! enoent ENOENT: no such file or directory, open
'/app/tmp/cache/my_local_package'
Run Code Online (Sandbox Code Playgroud)
我不确定/app/tmp/cache我的回购所在的地方是否存在,如果不是我应该改变它的地方.
节点v4.2.1,npm v2.14.7
我创建了一个大数组a,其内存增长到约 500 MB:
a = []
t = Thread.new do
loop do
sleep 1
print "#{a.size} "
end
end
5_000_000.times do
a << [rand(36**10).to_s(36)]
end
puts "\n size is #{a.size}"
a = []
t.join
Run Code Online (Sandbox Code Playgroud)
之后,我“清除”了a,但直到我终止了进程,分配的内存才改变。我是否需要做一些特殊的事情才能a从内存中删除所有这些分配给的数据?
例如,我有start和end
start = new Date(2013, 2, 28)
end = new Date(2013, 3, 2)
Run Code Online (Sandbox Code Playgroud)
我怎么能从这个数组中得到这样的
[new Date(2013, 2, 28),
new Date(2013, 2, 29),
new Date(2013, 2, 30),
new Date(2013, 2, 31),
new Date(2013, 3, 1),
new Date(2013, 3, 2)]
Run Code Online (Sandbox Code Playgroud)
我目前正在阅读有关Time-Scales 的文档,但仍然无法理解如何使用它们来实现这种效果。(或者,也许有更好的方法来做到这一点,如果是这样,我很高兴知道)
node.js ×3
ruby ×3
activerecord ×1
d3.js ×1
database ×1
encoding ×1
heroku ×1
javascript ×1
memory ×1
npm ×1
postgresql ×1
regex ×1
routes ×1
sinatra ×1