这是一个常见的问题,但没有一个答案似乎可以解决这个问题.我得到通常的:You have already activated rack 1.4.1, but your Gemfile requires rack 1.3.6. Using bundle exec may solve this.
清除Gemlock文件什么都没做,bundle install再次运行bundle install --binstubs没有做任何事情......运行没有解决问题,因为从你的应用程序根"运行./bin/{rake|rails|etc"只是造成了更多的错误.有没有办法解决这个看似常见的问题?
我有一个用rails编写的api,每个请求都响应一个JSON响应.
响应可能很大,所以我需要使用gzip压缩JSON响应.
想知道如何在rails控制器中执行此操作?
我添加了这条线
use Rack::Deflater
Run Code Online (Sandbox Code Playgroud)
在config.ru中
我是否还应该改变呈现JSON的行?
render :json => response.to_json()
Run Code Online (Sandbox Code Playgroud)
另外,我如何检查响应是否是gzip格式.. ??
我从终端做了一个curl请求,我只看到普通的普通JSON.
我想在我的rails应用程序中实现CORS,所以我用Google搜索了rack-cors gem.我按照README中的说法做了一切,相应地更新了Gemfile并更新application.rb如下:
module YourApp
class Application < Rails::Application
# ...
config.middleware.use Rack::Cors do
allow do
origins '*'
resource '*', :headers => :any, :methods => [:get, :post, :options]
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
但它没有用.不管我做了什么,在浏览器控制台中我不断收到消息:
XMLHttpRequest cannot load https://somewebsite.com. Origin http://0.0.0.0:3000 is not allowed by Access-Control-Allow-Origin.
看完这个博客帖子和问题在github上,我意识到,机架CORS中间件在中间件堆栈事项可能位置.所以我按照github问题的说法做了:
module YourApp
class Application < Rails::Application
# ...
config.middleware.insert 0, Rack::Cors do
allow do
origins '*'
resource '*', :headers => :any, :methods => [:get, :post, :options]
end
end
end …Run Code Online (Sandbox Code Playgroud) 有没有办法以应用程序接收数据的确切方式将所有传入请求转储到Sinatra应用程序?也许是某种Rack中间件?
我想在我的rails应用程序中安装sinatra应用程序.但我希望这个人分享相同的布局.
iframe可以工作,但你还有其他想法吗?
谢谢
有没有办法实现IP过滤或IP访问规则,就像我使用nginx/apache来限制或阻止Heroku上的某些IP一样?
注意:我知道这可以在我的应用程序(Rails 3.2)中轻松完成,但我不认为这是Heroku上最有效的资源使用.此外,基于Rack的解决方案比在Rails中实现过滤更好.
我正在尝试构建一个通过POST发送JSON(或XML)的rspec测试.但是,我似乎无法让它真正起作用:
json = {.... data ....}.to_json
post '/model1.json',json,{'CONTENT_TYPE'=>'application/json'}
Run Code Online (Sandbox Code Playgroud)
还有这个
json = {.... data ....}.to_json
post '/model1.json',json,{'Content-Type'=>'application/json'}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢!
我正在设置git存储库并尝试将其链接到Heroku.当我运行命令
git push heroku master
Run Code Online (Sandbox Code Playgroud)
我收到
Counting objects: 7, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (7/7), 714 bytes, done.
Total 7 (delta 1), reused 0 (delta 0)
-----> Heroku receiving push
! Heroku push rejected due to an unrecognized error.
! We've been notified, see http://support.heroku.com if the problem persists.
To git@heroku.com:morning-stream-3712.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:morning-stream-3712.git'
Run Code Online (Sandbox Code Playgroud)
我不太确定其他什么信息会有什么帮助,什么会使水变得混乱,所以我现在就把它留在这里.任何将我的应用程序推送到Heroku的帮助将不胜感激.谢谢.
我想知道是否有任何方法可以让Rails网络服务器(瘦)服务于资产管道创建的*.gz文件.据我所知,那些压缩级别比压缩级别更高Rack::Deflater,只能serve_static_assets在rackup文件中使用,而不能在config.middleware.
一个不太理想的解决方案可能是更改默认压缩级别,Zlib即哪些Rack::Deflater引用.它应该只需要gzip一次,然后它去Rack::Cache,然后希望是CDN.
第二个不太理想的解决方案可能是a Rack::Rewrite.
我们可以很容易地从许多着名的存储库中找到这样的样式,比如机架,导轨等.
PATH_INFO = 'PATH_INFO'.freeze
REQUEST_METHOD = 'REQUEST_METHOD'.freeze
SCRIPT_NAME = 'SCRIPT_NAME'.freeze
QUERY_STRING = 'QUERY_STRING'.freeze
CACHE_CONTROL = 'Cache-Control'.freeze
CONTENT_LENGTH = 'Content-Length'.freeze
CONTENT_TYPE = 'Content-Type'.freeze
Run Code Online (Sandbox Code Playgroud)
HTTP_IF_MODIFIED_SINCE = 'HTTP_IF_MODIFIED_SINCE'.freeze
HTTP_IF_NONE_MATCH = 'HTTP_IF_NONE_MATCH'.freeze
HTTP_IF_NONE_MATCH = 'HTTP_IF_NONE_MATCH'.freeze
Run Code Online (Sandbox Code Playgroud)
我想知道为什么这些常量字符串被冻结.因为它们都是常量,所以应该只有一个实例.当然我们可以在"foo".freeze某个地方引用相同的单例实例,但是人们通常会编写文字变量名称HTTP_IF_MODIFIED_SINCE.
所以在我看来,尽管使用它没有任何区别#freeze,为什么人们会冻结常数?