小编Dav*_*rth的帖子

Rails没有在ajax帖子上重新加载会话

我正在使用jQuery遇到一个非常奇怪的Rails和ajax问题(尽管我认为它不是特定于jQuery).

我的Rails应用程序使用cookie会话存储,我有一个非常简单的登录,在会话中设置用户ID.如果未在会话中设置user_id,则会重定向到登录页面.这没有问题.JQuery GET请求也可以正常工作.问题是当我做一个jQuery POST时 - 浏览器发送会话cookie ok(我用Firebug确认了这个并将request.cookies转储到日志中)但会话是空白的,即session是{}.

我在我的application.js中这样做:

$(document).ajaxSend(function(e, xhr, options) {
  var token = $("meta[name='csrf-token']").attr('content');
  xhr.setRequestHeader('X-CSRF-Token', token);
});
Run Code Online (Sandbox Code Playgroud)

这是我的样本帖子:

$.post('/test/1', { _method: 'delete' }, null, 'json');
Run Code Online (Sandbox Code Playgroud)

应该到达这个控制器方法(_method:delete):

def destroy
  respond_to do |format|
    format.json { render :json => { :destroyed => 'ok' }.to_json }
  end
end
Run Code Online (Sandbox Code Playgroud)

查看日志并使用Firebug我可以确认在ajax发布时在请求标头中发送了正确的cookie值,但似乎在某些时候Rails丢失了这个值并因此丢失了会话,因此它重定向到登录页面,永远不会到达方法.

我已经尝试了所有我能想到的东西来调试这个,但是我想到这可能是Rails中的一个错误.我正在使用Rails 3.0.4和jQuery 1.5,如果这有帮助的话.我发现定期(即非ajax)获取和发布请求工作非常奇怪,并且ajax获取请求工作没有问题,这只是ajax帖子没有.

任何帮助尝试解决这个问题将不胜感激!

非常感谢,
戴夫

ajax jquery ruby-on-rails

61
推荐指数
2
解决办法
2万
查看次数

如果缺少翻译,则回退到默认语言

在一个国际化的Rails(2.3.5)应用程序中,我想显示默认语言环境的翻译,而不是"翻译丢失" - 它有一张票,但它似乎仍然悬而未决:

https://rails.lighthouseapp.com/projects/8994/tickets/2637-patch-i18n-look-up-a-translation-with-the-default-locale-when-its-missed-with-another-specific-现场

例如(取自票证),带有两个翻译文件:en.yml和es.yml:

en:

  hello: 'hello'

  hello_world: 'hello world'



es:

  hello_world: 'hola mundo'
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时:

I18n.t :hello, :locale => :es
Run Code Online (Sandbox Code Playgroud)

Rails返回"hello"而不是"缺少翻译"的跨度.

由于故障单仍处于待处理状态,我该如何实现此功能?我知道我可以通过并改变所有我的I18n.t调用以获得:default选项,但如果我能避免它,我宁愿不必浏览所有视图!因为它是一个补丁,我想我可以把它应用到Rails冷冻宝石,但如果可以的话,我宁愿避免它.

ruby-on-rails internationalization

38
推荐指数
2
解决办法
2万
查看次数

在PHP中生成一个使用令牌:random_bytes或openssl_random_pseudo_bytes?

我需要在PHP中生成一次性令牌.我可以使用两个可用于此的函数,它们似乎做同样的事情:random_bytesopenssl_random_pseudo_bytes.例如,使用random_bytes:

var_dump(bin2hex(random_bytes(12)));

--> string(24) "338f489ec37a2c2b4943905d"
Run Code Online (Sandbox Code Playgroud)

和使用openssl_random_pseudo_bytes:

var_dump(bin2hex(openssl_random_pseudo_bytes(12)));

--> string(24) "1c7febea20029bd524fba8e7"
Run Code Online (Sandbox Code Playgroud)

openssl_random_pseudo_bytes是PHP 5.3及以上(所以我认为它已经存在了更长时间),并且random_bytes是PHP 7.我使用的是PHP 7,因此我可以使用它们.

那么两者之间是否存在任何重大(或轻微的)差异?如果没有,我很想去,random_bytes因为它有一个更容易的名字(=更容易阅读的代码).

php random token

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

无法在Dreamhost共享主机上使用Passenger WSGI运行Flask

我正在尝试让一个Flask"hello world"应用程序在Dreamhost共享服务器上运行,遵循他们的wiki上说明,但我没有运气.

我的Flask应用程序是Flask快速入门指南中的"hello world" :

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

根据DH维基说明,我在名为mysite的文件夹中有一个名为"hello.py"的文件.我的passenger_wsgi.py文件是:

import sys, os
INTERP = os.path.join(os.environ['HOME'], 'flask_env', 'bin', 'python')
if sys.executable != INTERP:
    os.execl(INTERP, INTERP, *sys.argv)
sys.path.append(os.getcwd())
from mysite import hello as application
Run Code Online (Sandbox Code Playgroud)

我已经尝试在Python控制台中运行命令,并且最后导入行失败,直到我将__init__.py文件添加到mysite目录.

当我尝试访问网站时,我只收到500错误(遗憾的是,日志中没有任何内容,除非它们在日志中我无法访问,因为这是共享服务器...).

由于这是最基本的设置(即,从维基中复制和粘贴),我不禁感到我错过了一些非常简单的东西.或者这可能在共享服务器上无法实现?

python shared passenger dreamhost flask

10
推荐指数
1
解决办法
4107
查看次数

无法使用Capistrano和RVM访问部署在Passenger上的应用程序的Rails控制台

在最终设法使我的Rails应用程序正常工作之后,我遇到了一个有点令人困惑的问题.我已经将我的Rails 3.0.5应用程序部署到带有Capistrano,RVM和Nginx的Ubuntu 10.10服务器上.一切正常,我可以确认Rails正在工作,因为我从数据库获取数据和有意义的日志消息.

问题是在服务器上,我无法访问控制台.当我尝试

rails c
Run Code Online (Sandbox Code Playgroud)

它说"程序'rails'目前尚未安装.要运行'rails',请让管理员安装包'rails'"

但是它安装,否则我的应用程序将无法正常工作!我只安装了两个RVM gemsets,全局一个和一个叫做"rails305".试

rvm gemset use rails305
Run Code Online (Sandbox Code Playgroud)

然后

gem list
Run Code Online (Sandbox Code Playgroud)

没有显示我的应用程序需要的任何宝石,但必须安装它们,因为1)没有它们的应用程序将无法工作2)在我的Capistrano部署脚本中,bundler安装它们(到那个gemset).所以这个问题显然与RVM有关,但我无法弄清楚它是什么......任何想法?

capistrano rubygems ruby-on-rails rvm

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

为什么在使用Composer的psr-4自动加载时指定命名空间?

我对如何在Composer中使用psr-4自动加载感到困惑.假设我有一个像这样的文件夹结构:

/
|- Core/
|   - Router.php
|- App/
|   - Models
|       User.php
|- composer.json
Run Code Online (Sandbox Code Playgroud)

基本上,在项目根目录中:composer.json ; 包含Router php类的Core文件夹; 一个App文件夹,其中包含一个包含User类的Models文件夹.

Router类看起来像这样:

<?php
namespace Core;

class Router {
}
Run Code Online (Sandbox Code Playgroud)

Users类看起来像这样:

<?php
namespace App\Models;

class User {
}
Run Code Online (Sandbox Code Playgroud)

所以我可以使用Composer psr-4自动加载器自动加载这些类,我可以在composer.json中执行此操作:

{
    "autoload": {
        "psr-4": {
            "Core\\": "Core",
            "App\\Models\\": "App/Models"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我可以使用这些类而不需要它们(运行后composer dump-autoload),如下所示:

$router = new Core\Router();
$user = new App\Models\User();
Run Code Online (Sandbox Code Playgroud)

这没有问题.

但是,我也可以在composer.json中执行此操作:

{
    "autoload": {
        "psr-4": { …
Run Code Online (Sandbox Code Playgroud)

php namespaces autoload composer-php psr-4

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

替代现在放弃的dbunit扩展?

因此,我可以使用PHPUnit测试使用数据库的代码,我刚刚使用Composer 安装了DbUnit扩展,并且得到以下消息:

软件包phpunit / dbunit被放弃了,您应该避免使用它。没有建议更换。

我已经看到了扩展名被放弃的问题,人们谈论着滚动自己的数据库测试代码,但是他们没有涉及更多细节。有没有推荐的方法可以使用PHPUnit测试数据库代码,或者有人知道任何示例吗?

(我确实提出了一个问题,并向PHPUnit的作者询问了这个问题,但是他的回答很迅速,而且很直截了当地-“不,没有。”):-/

phpunit dbunit unit-testing

5
推荐指数
0
解决办法
385
查看次数

CodeIgniter和自动加载数据库库

我有一个问题,使用CodeIgniter连接到数据库.

在模型中,如果我这样做

$this->load->database();
Run Code Online (Sandbox Code Playgroud)

然后查询如

$query = $this->db->get('articles', 10);
Run Code Online (Sandbox Code Playgroud)

工作并返回数据.但是,当我删除load-> database行并尝试使用自动加载数据库库时

$autoload['libraries'] = array('database');
Run Code Online (Sandbox Code Playgroud)

在application/config/autoload.php中,上面的查询失败.因为它在我显式加载库时起作用,所以我的数据库连接不是问题.我正在使用CodeIgniter 2.0.2(当前的最新版本).

由于我的大多数页面都使用数据库,我想自动加载它以避免在每个模型中逐个加载它.我是否误解了有关加载数据库库的文档或我做错了什么?

codeigniter codeigniter-2

2
推荐指数
2
解决办法
4万
查看次数